Android进程的生命周期及其进程等级分析

如果有细心注意的话,在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键的时候点击能够快一点出来而已。此时的进程等级也是最低的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值