如果有细心注意的话,在Android的Mainifest的下面,有一个application标签,这个标签默认指定的是系统提供的application,但是其实这个application可以由我们自己指定,因为在Mainifest里面,任何一个标签都是一个对象使用,所以application自然也是一个类,也可以继承实现,然后使用我们自己的application,代码如下,由于时间紧,所以只实现几个application的方法。
第一步:通过继承Application类,重写Application类中的方法
package com.yupeibiao.applicationdeom;
import android.app.Application;
import android.content.res.Configuration;
import android.util.Log;
public class yupeibiaoApplication extends Application {
/**
* @author yupeibiao_love 一个自己的应用程序,可以继承自Application
*/
public static final String TAG="yupeibiao";
@Override
public void onCreate() {
// TODO Auto-generated method stub
// 应用程序刚开始创建
Log.i(TAG, "-------------yupeibiaoApplication--onCreate---------------");
super.onCreate();
}
@Override
public void onTerminate() {
// TODO Auto-generated method stub
// 应用程序退出
Log.i(TAG, "-------------yupeibiaoApplication--onTerminate---------------");
super.onTerminate();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
// 应用程序设置改变 比如切换横竖屏
Log.i(TAG, "-------------yupeibiaoApplication--onConfigurationChanged---------------");
super.onConfigurationChanged(newConfig);
}
@Override
public void onLowMemory() {
// TODO Auto-generated method stub
// 应用程序在低内存
Log.i(TAG, "-------------yupeibiaoApplication--onLowMemory---------------");
super.onLowMemory();
}
}
第二步:重新为Mainifest的标签下的application标签增加name属性,写为自己的Application类
<application
android:name=".yupeibiaoApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
第三步,调试程序,观察程序创建,低内存,退出的时候的日志
我们可以看到onCreate()是应用程序开始创建的方法,onConfigChanged()方法是应用程序设置改变的时候调用的方法,lowMemory是系统低内存的时候调用的方法,而onTerminate()是应用程序正常退出的时候调用的方法,我这里强调是正常退出,是因为如果是直接System.exit(0);或者是Process杀死进程的方式是这个方法都没有时间去调用的,因为简单粗暴。
okay,Android进程的生命周期我们已经大概了解了,接下来继续学习Android的进程等级,在Android中,进程分为5个等级,等级也就是优先级。
1、foreground process(actiive process)
前台进程,例如当Activity正处于onresume()状态的时候,获取得到焦点,能够用户交互的时候,是最难回收的,所以优先级是最高的。
同样,还有当进程中有service执行的时候。
另外,绑定服务的时候。
BroadcastReceiver正在执行onReceive()方法的时候。等等。
2、visible process 可视化进程
可视化进程,例如当有一个Activity,但是弹出了一个依赖于这个Activity的Dialog窗口,这个进程的等级是第二的,在前台进程之下。
但是可视化进程依然是非常重要的,实在不到迫不得已是不会回收的,比如低内存的时候,不然给用户的体验非常差。
3、service process 服务进程
service process是不可见进程,也就是没有任何进程可视的,隐藏在后台执行的,比如听歌曲,下载音乐,等等。
4、background process
后台进程跟服务进程的区别就是后台进程是没有执行什么操作,例如一个helloworld摁下home,就隐藏到后台执行,但是跟用户并没有什么交互,比如下载什么的也没有,所以此时进程就是后台进程。
5、empty process
空进程,顾名思义,就是什么都没有了,比如一个helloword 摁下返回键退出,此时activity是销毁了,但是进程未被杀死,此时不是后台进程,而是空进程,在缓存中,是为了例如用户长摁下home键的时候点击能够快一点出来而已。此时的进程等级也是最低的。