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 }
时间: 2024-12-18 07:04:49