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回调方法实现。
附:官网