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 == ;
}
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的生命周期
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXzUleNNzZq5UNNRlTyhGSaZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TN0cDMwQzM1ETMyIDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
- 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