1. 内容簡介:
在Android系統中,activity是由framework層建立的,而且,由framework管理這activity的生命周期。了解app中各個Actiivty的生命周期,對于開發Android應用程式至關重要。
那麼,當activty進行切換的時候,如何知道相關activity的狀态(生命周期相關函數的調用)呢?可以通過App的registerActivityLifecycleCallbacks來實作。
當按下Android傳回鍵或Home鍵,activity生命周期是如何執行的呢?
2. Android傳回鍵與Home鍵對activity生命周期的影響:
在Android中,當按下Home鍵,預設情況下stop前台的actiity,即activity設定成onstop,而不是ondestory。如果再次啟動該activity不是調用onCreate,而是調用onSavedInstanceState方法,保持上次Activity的狀态則是從onRestart開始->onStart->onResume;
而當按下back鍵則不同,back鍵預設finish前台的activity,即activity的狀态為onDestory為止,再次啟動該activity則從onCreate開始,不會調用onSavedInstanceState方法。
3. Application的registerActivityLifecycleCallbacks:注冊Activity生命周期回調函數
功能:通過注冊Application的registerActivityLifecycleCallbacks,可以監聽Acitivty的生命周期相關函數的調用情況。
代碼如下:
package com.test.myapplication5;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import android.util.Log;
public class MyApp extends Application {
private static final String TAG = "MainApplication";
private static MyApp appInstance;
public static Application getAppInstance() {
return appInstance;
}
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "===onCreate======");
appInstance = this;
registActivityLife();
}
private void registActivityLife() {
this.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
Log.i(TAG, "[registActivityLife] onActivityCreated activity " + activity.getLocalClassName());
}
@Override
public void onActivityStarted(Activity activity) {
Log.i(TAG, "[registActivityLife] onActivityStarted activity " + activity.getLocalClassName());
}
@Override
public void onActivityResumed(Activity activity) {
Log.i(TAG, "[registActivityLife] onActivityResumed activity " + activity.getLocalClassName());
}
@Override
public void onActivityPaused(Activity activity) {
Log.i(TAG, "[registActivityLife] onActivityPaused activity " + activity.getLocalClassName());
}
@Override
public void onActivityStopped(Activity activity) {
Log.i(TAG, "[registActivityLife] onActivityStopped activity " + activity.getLocalClassName());
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
Log.i(TAG, "[registActivityLife] onActivitySaveInstanceState activity " + activity.getLocalClassName());
}
@Override
public void onActivityDestroyed(Activity activity) {
Log.i(TAG, "[registActivityLife] onActivityDestroyed activity " + activity.getLocalClassName());
}
});
}
}
運作結果:
28755-28755/com.test.myapplication5 I/MainApplication: [registActivityLife] onActivityCreated activity MainActivity
28755-28755/com.test.myapplication5 I/MainApplication: [registActivityLife] onActivityStarted activity MainActivity
28755-28755/com.test.myapplication5 I/MainApplication: [registActivityLife] onActivityResumed activity MainActivity
28755-28755/com.test.myapplication5 I/MainApplication: [registActivityLife] onActivityPaused activity MainActivity
28755-28755/com.test.myapplication5 I/MainApplication: [registActivityLife] onActivityCreated activity activity.MyBrowserActivity2
28755-28755/com.test.myapplication5 I/MainApplication: [registActivityLife] onActivityStarted activity activity.MyBrowserActivity2
28755-28755/com.test.myapplication5 I/MainApplication: [registActivityLife] onActivityResumed activity activity.MyBrowserActivity2
28755-28755/com.test.myapplication5 I/MainApplication: [registActivityLife] onActivityStopped activity MainActivity
28755-28755/com.test.myapplication5 I/MainApplication: [registActivityLife] onActivitySaveInstanceState activity MainActivity
相關activity的代碼略。