Android 在SDK 14提供了一個Callback即ActivityLifecycleCallbacks,在Application中通過註冊這個Callback可拿到App所有Activity的生命週期回調。解除註冊可以調用Application中的unregisterActivityLifecycleCallbacks。
Application.java
...
public interface ActivityLifecycleCallbacks {
void onActivityCreated(Activity activity, Bundle savedInstanceState);
void onActivityStarted(Activity activity);
void onActivityResumed(Activity activity);
void onActivityPaused(Activity activity);
void onActivityStopped(Activity activity);
void onActivitySaveInstanceState(Activity activity, Bundle outState);
void onActivityDestroyed(Activity activity);
}
...
Demo
CustomApplication.java
public class CustomApplication extends Application {
private static CustomApplication instance;
// Android 生命週期監聽
private ActivityLifeListener activityLifeListener;
// 可見 Activity 個數
private int activityCount;
// 判斷是否已經顯示對話框
private boolean isShowDialog;
@Override
public void onCreate() {
super.onCreate();
CustomApplication.instance = this;
activityLifeListener = new ActivityLifeListener();
this.registerActivityLifecycleCallbacks(activityLifeListener);
}
public static CustomApplication getInstance() {
return instance;
}
/**
* 判斷 App 是否在前臺運行
*/
public boolean isBackground() {
return activityCount == 0;
}
private class ActivityLifeListener implements ActivityLifecycleCallbacks{
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
@Override
public void onActivityStarted(Activity activity) {
activityCount++;
}
@Override
public void onActivityResumed(Activity activity) {
if (!isShowDialog) {
isShowDialog = true;
new AlertDialog.Builder(activity)
.setTitle("提示")
.setMessage("這個對話框只有按Home鍵之後再回來才顯示")
.setPositiveButton("確定", null)
.create()
.show();
}
}
@Override
public void onActivityPaused(Activity activity) {}
@Override
public void onActivityStopped(Activity activity) {
activityCount--;
if (isBackground()) {
// initialization something
isShowDialog = false;
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override
public void onActivityDestroyed(Activity activity) {}
}
}
Activity的生命週期
- HOME鍵的執行順序:onPause->onStop->onRestart->onStart->onResume.
- BACK鍵的順序: onPause->onStop->onDestroy->onCreate->onStart->onResume.
- onPause不要做太耗時的工作.
- onCreate 與 onDestory 匹配.
- onStart 與 onStop 匹配.
- onResume 與 onResume 匹配.
- onStart 與 onResume 都表示在前臺運行, 區別在於 onStart 不可見, onResume 可見.
參考資料:
1. http://blog.csdn.net/lfdfhl/article/details/51045414