MyApp

  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

MyApp的相关文章

EntityFramework codefirst Enable-Migrations No context type was found in the assembly &ldquo;MyApp.Web&rdquo; error

Enable-Migrations -Force -ContextTypeName "MyApp.Repository.DataContext" -ProjectName "MyApp.Repository" -Startup "MyApp.Web" -ConnectionStringName "DataContext" -verbose

假设web应用的文档根目录为MyApp,那么可以从哪里找到database.jar文件。

A. MyApp目录下 B. MyApp\images目录下 C. MyApp\WEB-INF目录下 D. MyApp\WEB-INF\lib目录下 解答:D Web工程的lib是放置.jar文件的地方. 原文地址:https://www.cnblogs.com/borter/p/9552908.html

Python 实现 Myapp.exe

1. Github 项目地址 https://github.com/fengoxiao/Myapp/blob/master/Myapp.py 项目要求: 实现一个自动生成小学四则运算题目的命令行程序. 1. 使用 -n 参数控制生成题目的个数 2. 使用 -r 参数控制题目中数值(自然数.真分数和真分数分母)的范围 3.使用 -e,-a参数对给定的题目文件和答案文件,判定答案中的对错并进行数量统计 4.程序应能支持一万道题目的生成 设计: 分为3个块内容,第一个是生成表达式,第二个是写入文件以及

ValueError: Related model &#39;myapp.ExUser&#39; cannot be resolved django扩展User字段

扩展字段目前有两种方法: 扩展字段 新建一张表->然后与原有表创建一对一关系 继承django.contrib.auth.models下的AbstractUser类 ,重写User类 两种方式都是官方文档提到的,,实现方法可以在官网以及搜索引擎搜到各大佬的博客上,我今天只分享一下自己遇到的问题及解决方法 我采用的是第2种, 重写User的方法,但是在迁移数据库的时候,遇到问题, 编写好其它表之后,发现User表中字段需要添加于是在models.py 文件中添加了 ExUser类 from dja

[react] Module not found: Can&#39;t resolve &#39;schedule&#39; in &#39;C:\Users\adcal\dvmtn7\myapp\node_modules\react-dom\cjs&#39;

dva guide: https://dvajs.com/guide/getting-started.html#%E5%AE%89%E8%A3%85-dva-cli 按照教程-快速上手, 安装, 创建新应用, 以及build之后都没问题, dva提供的初始化页面可以看到. 下一步安装 antd, 以及 定义路由和之后的可复用的 component UI后 页面报错: ./node_modules/react-dom/cjs/react-dom.development.js Module not

angular中模板

<!DOCTYPE html><!--调用模块--><html lang="en" ng-app="myApp"><head> <meta charset="UTF-8"> <script src="js/angular.js"></script> <title>Title</title></head><

一招制敌 - 玩转 AngularJS 指令的 Scope (作用域),讲得特别好

学习了AngularJS挺长时间,最近再次回首看看指令这部分的时候,觉得比自己刚开始学习的时候理解的更加深入了,尤其是指令的作用域这部分. 步入正题: 每当一个指令被创建的时候,都会有这样一个选择,是继承自己的父作用域(一般是外部的Controller提供的作用域或者根作用域($rootScope)),还是创建一个新的自己的作用域,当然AngularJS为我们指令的scope参数提供了三种选择,分别是:false,true,{}:默认情况下是false. scope = false 首先我们来看

【Windows10&nbsp;IoT开发系列】Powershell命令行实用程序

原文:[Windows10 IoT开发系列]Powershell命令行实用程序 更新帐户密码: 强烈建议你更新默认的管理员帐户密码.若要更新帐户密码,你可以发出以下命令: net user Administrator [new password]​ (其中 [new password] 表示你选择的强密码). 创建本地用户帐户: 如果你想要授予其他人访问你的 Windows IoT Core 设备的权限,你可以通过在 net user [username] [password] /add​ 中键

PYQT设计无边框窗体

#UI.py,通过UI设计师制作后直接转换为UI.py脚本 # -*- coding: utf-8 -*-from PyQt4 import QtCore, QtGui try:    _fromUtf8 = QtCore.QString.fromUtf8except AttributeError:    _fromUtf8 = lambda s: s class Ui_Form(object):    def setupUi(self, Form):        Form.setObject