ActivityLifecycleCallbacks详解

Android在API14之后添加了用于监听应用Activity生命周期的回调接口ActivityLifecycleCallbacks,使用时需要在Application中进行注册。 

 

 

 

一.简单使用

实现类

package com.wjn.lubandemo.application;

import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import android.util.Log;

public class MyActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks {


    private MyActivityLifecycleCallbacks(){

    }

    private static class SingleTonHoler {
        private static MyActivityLifecycleCallbacks INSTANCE = new MyActivityLifecycleCallbacks();
    }


    public static MyActivityLifecycleCallbacks getInstance(){
        return SingleTonHoler.INSTANCE;
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        Log.d("LifecycleCallbacks", "onActivityCreated方法activity----:"+activity);
    }

    @Override
    public void onActivityStarted(Activity activity) {
        Log.d("LifecycleCallbacks", "onActivityStarted方法activity----:"+activity);
    }

    @Override
    public void onActivityResumed(Activity activity) {
        Log.d("LifecycleCallbacks", "onActivityResumed方法activity----:"+activity);
    }

    @Override
    public void onActivityPaused(Activity activity) {
        Log.d("LifecycleCallbacks", "onActivityPaused方法activity----:"+activity);
    }

    @Override
    public void onActivityStopped(Activity activity) {
        Log.d("LifecycleCallbacks", "onActivityStopped方法activity----:"+activity);
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
        Log.d("LifecycleCallbacks", "onActivitySaveInstanceState方法activity----:"+activity);
    }

    @Override
    public void onActivityDestroyed(Activity activity) {
        Log.d("LifecycleCallbacks", "onActivityDestroyed方法activity----:"+activity);
    }

}

 

 

注册

package com.wjn.lubandemo.application;

import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;

import java.util.List;

public class MyApplication extends Application {

    /**
     * onCreate--->程序创建的时候执行
     */

    @Override
    public void onCreate() {
        super.onCreate();
        Context context = getApplicationContext();
        boolean isMainProcess = (context != null && TextUtils.equals(context.getPackageName(), getCurrentProcessName(context)));
        if (isMainProcess) {
            registerActivityLifecycleCallbacks(MyActivityLifecycleCallbacks.getInstance());
            Log.d("MyApplication", "当前线程应该正常初始化各种方法");
        }
    }

    /**
     * 获取当前进程
     */

    private String getCurrentProcessName(Context context) {
        int pid = android.os.Process.myPid();
        String processName = "";
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> list = manager.getRunningAppProcesses();
        if (list != null) {
            for (ActivityManager.RunningAppProcessInfo processInfo : list) {
                if (processInfo != null && processInfo.pid == pid) {
                    processName = processInfo.processName;
                }
            }
        }
        return processName;
    }

}

 

 

 

运行结果

 

1.进入APP(MainActivity为主Activity)

D/LifecycleCallbacks: onActivityCreated方法activity----:com.wjn.lubandemo.activity.MainActivity@97ee287


D/LifecycleCallbacks: onActivityStarted方法activity----:com.wjn.lubandemo.activity.MainActivity@97ee287


D/LifecycleCallbacks: onActivityResumed方法activity----:com.wjn.lubandemo.activity.MainActivity@97ee287

可见,创建了MainActivity。执行了三个生命周期方法。

 

 

2.点击进入另外的Activity(MainActivity没有finish)

Intent intent = new Intent(MainActivity.this,EventActivity.class);
startActivity(intent);

 

D/LifecycleCallbacks: onActivityPaused方法activity----:com.wjn.lubandemo.activity.MainActivity@97ee287

D/LifecycleCallbacks: onActivityCreated方法activity----:com.wjn.lubandemo.activity.EventActivity@d8a9381

D/LifecycleCallbacks: onActivityStarted方法activity----:com.wjn.lubandemo.activity.EventActivity@d8a9381

D/LifecycleCallbacks: onActivityResumed方法activity----:com.wjn.lubandemo.activity.EventActivity@d8a9381

D/LifecycleCallbacks: onActivitySaveInstanceState方法activity----:com.wjn.lubandemo.activity.MainActivity@97ee287

D/LifecycleCallbacks: onActivityStopped方法activity----:com.wjn.lubandemo.activity.MainActivity@97ee287

可见,Stop了MainActivity。同时创建了EventActivity。

 

 

3.点击进入另外的Activity(MainActivity执行了finish)

Intent intent=new Intent(MainActivity.this,EventActivity.class);
startActivity(intent);
finish();

 

D/LifecycleCallbacks: onActivityPaused方法activity----:com.wjn.lubandemo.activity.MainActivity@bd07ab9

D/LifecycleCallbacks: onActivityCreated方法activity----:com.wjn.lubandemo.activity.EventActivity@25ac0d0

D/LifecycleCallbacks: onActivityStarted方法activity----:com.wjn.lubandemo.activity.EventActivity@25ac0d0

D/LifecycleCallbacks: onActivityResumed方法activity----:com.wjn.lubandemo.activity.EventActivity@25ac0d0

D/LifecycleCallbacks: onActivityStopped方法activity----:com.wjn.lubandemo.activity.MainActivity@bd07ab9

D/LifecycleCallbacks: onActivityDestroyed方法activity----:com.wjn.lubandemo.activity.MainActivity@bd07ab9

可见,销毁了MainActivity。同时创建了EventActivity。

 

由此可知,Application.ActivityLifecycleCallbacks可全局的获取某个Activity的生命周期。监听Activity的启动销毁过程。

 

当然也可监听应用中集成的第三方SDK中的Activity的启动。

也可以判断应用是否处于前台可见状态,通过onActivityResumed和onActivityPaused回调方法实现。

 

 

 

附:官网

https://developer.android.google.cn/reference/android/app/Application.ActivityLifecycleCallbacks?hl=en

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值