码迷,mamicode.com
首页 > 移动开发 > 详细

MyApp

时间:2016-05-07 13:14:46      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
  1 public class MyApp extends Application {
  2 
  3     // 当前Application的实例
  4     private static MyApp instance;
  5     // 传输数据的List,用完之后要清除,是static的
  6     private static List<Map<String, Object>> DATA;
  7     // 所有已启动的Activity
  8     private List<Activity> activities = new LinkedList<>();
  9     // 所有已启动的Service
 10     private List<Service> services = new LinkedList<>();
 11 
 12 
 13     /**
 14      * 获取MyApplication实例,是单例模式
 15      */
 16     public static MyApp getInstance() {
 17         return instance;
 18     }
 19 
 20     /**
 21      * 利用application传值, 传递的值写在map里,intent传string类型的key
 22      */
 23     public static List<Map<String, Object>> getDATA() {
 24         return DATA;
 25     }
 26 
 27     /**
 28      * 程序的入口,记得在manifest中添加name,耗时操作最好放在欢迎页
 29      */
 30     @Override
 31     public void onCreate() {
 32         super.onCreate();
 33         Log.e("Application", "onCreate");
 34         instance = this;
 35         DATA = new ArrayList<>();
 36         // initStrictMode();
 37         registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
 38             @Override
 39             public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
 40                 Log.e(activity.toString(), "--->onCreated");
 41                 addActivity(activity);
 42             }
 43 
 44             @Override
 45             public void onActivityStarted(Activity activity) {
 46                 Log.e(activity.toString(), "--->onStarted");
 47             }
 48 
 49             @Override
 50             public void onActivityResumed(Activity activity) {
 51                 Log.e(activity.toString(), "--->onResumed");
 52             }
 53 
 54             @Override
 55             public void onActivityPaused(Activity activity) {
 56                 Log.e(activity.toString(), "--->onPaused");
 57             }
 58 
 59             @Override
 60             public void onActivityStopped(Activity activity) {
 61                 Log.e(activity.toString(), "--->onStopped");
 62             }
 63 
 64             @Override
 65             public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
 66                 Log.e(activity.toString(), "--->onCreated");
 67             }
 68 
 69             @Override
 70             public void onActivityDestroyed(Activity activity) {
 71                 Log.e(activity.toString(), "--->onDestroyed");
 72                 removeActivity(activity);
 73             }
 74         });
 75 
 76     }
 77 
 78     /**
 79      * Android 4.0
 80      * 触发条件:当系统决定要杀死一个进程以求更多内存
 81      *
 82      * @param level TRIM_MEMORY_COMPLETE = 80; 清理 LRU(最近最少使用)队列的尾部的进程
 83      *              TRIM_MEMORY_MODERATE = 60; 清理 LRU进程队列的中间部分的进程
 84      *              TRIM_MEMORY_BACKGROUND = 40; 清理 已经出了LRU列表进程
 85      *              TRIM_MEMORY_UI_HIDDEN = 20; 清理 曾经显示过用户界面的进程
 86      *              以上4个是4.0增加 , 以下3个还会附带执行onTrimMemory()
 87      *              TRIM_MEMORY_RUNNING_CRITICAL = 15; 清理 不是一次性的后台进程
 88      *              TRIM_MEMORY_RUNNING_LOW = 10; 清理 不是后台的进程
 89      *              TRIM_MEMORY_RUNNING_MODERATE = 5; 清理 所有,包括栈顶的activity
 90      */
 91     @Override
 92     public void onTrimMemory(int level) {
 93         Log.e("Application", "onTrimMemory--->" + level);
 94         super.onTrimMemory(level);
 95     }
 96 
 97     /**
 98      * 触发条件:内存不足, 并且系统想要清理内存以获取更多内存时
 99      * 可以执行一些清除缓存,释放垃圾对象的方法,会调用System.gc()
100      * 1.OnLowMemory被回调时,已经没有后台进程;而onTrimMemory被回调时,还有后台进程。
101      * 2.OnLowMemory是在最后一个后台进程被杀时调用,一般情况是low memory killer 杀进程后触发;
102      * 而OnTrimMemory的触发更频繁,每次计算进程优先级时,只要满足条件,都会触发.
103      * 3.通过一键清理后,OnLowMemory不会被触发,而OnTrimMemory会被触发一次。
104      */
105     @Override
106     public void onLowMemory() {
107         Log.e("Application", "onLowMemory");
108         super.onLowMemory();
109     }
110 
111     /**
112      * 触发条件:当终止应用程序对象时调用,当程序是被内核强制终止时不被调用
113      * activity中也有onTrimMemory和onLowMemory,但是没有onTerminate
114      */
115     @Override
116     public void onTerminate() {
117         Log.e("Application", "onTerminate");
118         super.onTerminate();
119     }
120 
121     /**
122      * android 4.0
123      * 注册activity的生命周期回调方法,主要是打印日志,在onCreate中调用
124      * 比在BaseActivity打印好,并不是所有的activity都继承BaseActivity
125      * 并且可以打印出对应的activity的name,BaseActivity中想要打印具体name还要用泛型
126      */
127     @Override
128     public void registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {
129         super.registerActivityLifecycleCallbacks(callback);
130     }
131 
132     /**
133      * 注销activity的生命周期回调方法
134      */
135     @Override
136     public void unregisterActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {
137         super.unregisterActivityLifecycleCallbacks(callback);
138     }
139 
140     /**
141      * 监听内存情况 ,可以重写onTrimMemory和onLowMemory来进行内存优化,
142      * 回调onTrimMemory和onLowMemory和onConfigurationChanged
143      */
144     @Override
145     public void registerComponentCallbacks(ComponentCallbacks callback) {
146         super.registerComponentCallbacks(callback);
147     }
148 
149     /**
150      * 注销内存监听,应用灵活
151      */
152     @Override
153     public void unregisterComponentCallbacks(ComponentCallbacks callback) {
154         super.unregisterComponentCallbacks(callback);
155     }
156 
157     /**
158      * android 6.0引入,回调方法最低要在4.3
159      * 用户通过助手程序与应用进行互动的新方式。如需使用此功能,用户必须启用助手以使用当前上下文。
160      * 启用后,用户可通过长按主页按钮在任何应用内召唤助手。
161      */
162     @Override
163     public void registerOnProvideAssistDataListener(OnProvideAssistDataListener callback) {
164         super.registerOnProvideAssistDataListener(callback);
165     }
166 
167     /**
168      * 注销助手程序交互的监听
169      */
170     @Override
171     public void unregisterOnProvideAssistDataListener(OnProvideAssistDataListener callback) {
172         super.unregisterOnProvideAssistDataListener(callback);
173     }
174 
175     /**
176      * @return 获取所有存活的activity
177      */
178     public List<Activity> getActivities() {
179         return activities;
180     }
181 
182     /**
183      * @return 获取所有存活的service
184      */
185     public List<Service> getServices() {
186         return services;
187     }
188 
189     /**
190      * activity在onCreate是调用此方法
191      */
192     public void addActivity(Activity activity) {
193         activities.add(activity);
194     }
195 
196     /**
197      * activity在onDestroy是调用此方法
198      */
199     public void removeActivity(Activity activity) {
200         activities.remove(activity);
201     }
202 
203     /**
204      * start service在onCreate是调用此方法
205      */
206     public void addService(Service service) {
207         services.add(service);
208     }
209 
210     /**
211      * start service在onDestroy是调用此方法
212      */
213     public void removeService(Service service) {
214         services.remove(service);
215     }
216 
217     /**
218      * 关闭所有activity,应用与一键退出
219      */
220     public void closeActivities() {
221         for (Activity activity : activities) {
222             if (activity != null)
223                 activity.finish();
224         }
225     }
226 
227     /**
228      * 关闭所有start service,应用与一键退出
229      */
230     public void closeServices() {
231         for (Service service : services) {
232             if (service != null)
233                 stopService(new Intent(this, service.getClass()));
234         }
235     }
236 
237     /**
238      * 严核模式,允许在主线程进行网络操作
239      */
240     private void initStrictMode() {
241         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
242                 .detectDiskReads()
243                 .detectDiskWrites()
244                 .detectNetwork()
245                 .penaltyLog()
246                 .build());
247 
248         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
249                 .detectLeakedSqlLiteObjects()
250                 .detectLeakedClosableObjects()
251                 .penaltyLog()
252                 .penaltyDeath()
253                 .build());
254     }
255 
256 }
View Code

 

MyApp

标签:

原文地址:http://www.cnblogs.com/gg1992/p/5467850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!