Application生命周期(一) 2、Application生命周期 3、实例展示 四、总结一下

1、Application是什么?

Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个application对象

用来存储系统的一些信息。通常我们是不需要指定一个Application的,这时系统会自动帮我们创建

如果需要创建自己 的Application也很简单创建一个类继承 Application并在manifest的application标签中进行注册

(只需要给Application标签增加个name属性把自己的 Application的名字定入即可)。

Android系统会为每个程序运行时创建一个Application类的对象且只创建一个、可以理解为单例模式的一个类。

它的生命周期是整个程序运行中最长的 因为它是全局的单例,所以在不同的Activity和Service中获取的都是一个对象。

一般会使用Application来进行一些数据传递,数据缓存的操作。

Application中包含了五个公开的方法
1)void  onConfigurationChanged(Configuration newConfig)
2)void  onCreate() 
3)void  onLowMemory()
4)void  onTerminate()
5)void onTrimMemory()

第一个是在配置被改变时触发
第二个是在程序创建时创建
第三个内存不够时触发
第四个当终止程序时调用 但是不能保证一定调用
第五个是在内存清理时触发

3、实例展示

 1 /**
 2  * @author ljcheng
 3  * @date 2019/6/29
 4  */
 5 public class MyApplication extends Application {
 6 
 7     private static String TAG = "MyApplication";
 8 
 9     @Override
10     public void onCreate() {
11         // 程序创建的时候执行
12         KLog.d(TAG, "onCreate");
13         super.onCreate();
14     }
15 
16     @Override
17     public void onTerminate() {
18         // 程序终止的时候执行
19         //当终止应用程序对象时调用,不保证一定被调用,当程序是被内核终止以便为其他应用程序释放资源,那
20         //么将不会提醒,并且不调用应用程序的对象的onTerminate方法而直接终止进程
21         KLog.d(TAG, "onTerminate");
22         super.onTerminate();
23     }
24 
25     @Override
26     public void onLowMemory() {
27         // 当后台程序已经终止资源还匮乏时会调用这个方法。好的应用程序一般会在这个方法里面释放一些不必
28         // 要的资源来应付当后台程序已经终止,前台应用程序内存还不够时的情况。
29         KLog.d(TAG, "onLowMemory");
30         super.onLowMemory();
31     }
32 
33     @Override
34     public void onTrimMemory(int level) {
35         // 程序在内存清理的时候执行
36         KLog.d(TAG, "onTrimMemory");
37         super.onTrimMemory(level);
38     }
39 
40     @Override
41     //配置改变时触发这个方法
42     public void onConfigurationChanged(Configuration newConfig) {
43         KLog.d(TAG, "onConfigurationChanged");
44         super.onConfigurationChanged(newConfig);
45     }
46 
47 }

四、总结一下

1.Application的生命周期在整个应用运行期间是最长的

2.具体关于Applicatiom被杀死的情况在上面的代码已有体现 下面引用下其他人总结的一些情况

备注:application 被杀死的情况分析:
为了决定在内存较低的时候杀掉哪个进程, Android会根据运行在这些进程内的组件及他们的状态把进程划分成一个”重要程度层次”. 其重要的程度按以下规则排序:

1:前端进程可以是一个持有运行在屏幕最前端并与用户交互的Activity的进程(onResume方法被调用时),也可以是持有一个正在运行的IntentReceiver(也就是说他正在执行自己的onReceiveIntent方法)的进程. 在系统中, 只会有少数这样的进程, 并且除非内存已经低到不够这些进程运行, 否则系统不会主动杀掉这些进程. 这时, 设备通常已经达到了需要内存整理的状态, 所以杀掉这些进程是为了不让用户界面停止响应.

2:可视进程是持有一个被用户可见, 但没有显示在最前端 (onPause方法被调用时) 的Activity的进程. 举例来说, 这种进程通常出现在一个前端Activity以一个对话框出现并保持前一个Activity可见时. 这种进程被系统认为是极其重要的, 并且通常不会被杀掉, 除非为了保持所有前端进程正常运行不得不杀掉这些可见进程.

3:服务进程是持有一个Service的进程, 该Service是由startService()方法启动的, 尽管这些进程用户不能直接看到, 但是通常他们做的工作用户是十分关注的(例如, 在后台播放mp3或是在后台下载 上传文件), 所以, 除非为了保持所有的前端进程和可视进程正常运行外, 系统是不会杀掉服务进程的.

4:后台进程是持有一个不再被用户可见的Activity(onStop()方法被调用时)的进程. 这些进程不会直接影响用户体验. 加入这些进程已经完整的,正确的完成了自己的生命周期(访问Activity查看更多细节), 系统会在为前三种进程释放内存时随时杀掉这些后台进程. 通常会有很多的后台进程在运行, 所以这些进程被存放在一个LRU列表中, 以保证在低内存的时候, 最近一个被用户看到的进程会被最后杀掉

5:空进程是没有持有任何活动应用组件的进程. 保留这种进程的唯一理由是为了提供一种缓存机制, 缩短他的应用下次运行时的启动时间. 就其本身而言, 系统杀掉这些进程的目的是为了在这些空进程和底层的核心缓存之间平衡整个系统的资源

新人学习中,如有不正确的地方还望大家谅解,欢迎评论指出问题。