Android非異常情況下的Activity生命周期分析
Activity非異常情況下的生命周期是指,用戶正常參與UI交互的情況下,Activity所經過的生命周期的改變;一般情況下,Activity會經過以下幾個生命周期。
1、OnCreate(): 表示Activity正在創建,這個是生命周期的第一個方法,該方法隻調用一次,在這個方法中,一般做變量初始化的操作,例如綁定一個Button控件的Id等。
2、onRestart(): 表示Activity正在重新啟動,一般情況下,如果最前面的Activity從不可見狀態變為可見狀態時,onRestart()這個方法都會被調用,一般情況下都是用戶操作導致的;例如,當前這個Activity叫A,用戶啟動瞭一個新的Activity叫B,這時A就會暫停,也就是onPause()和 onStop()被調用瞭,接著用戶又回到瞭這個A時,就會出現這種情況。
3、onStart(): 表示Activity正在被啟動,將要開始,這時的Activity是可見狀態瞭,但是沒有出呈現到前臺的,還不能和用戶打交道,其實Activity已經顯示出來瞭,隻是我們看不到而已
4、onResume(): 表示Activity已經可見瞭,也就是呈現在前臺上,即我們肉眼能夠看得見瞭。我們要留意這個onResume()和onStart()的區別,onStart()和onResume()都表示是Activity的可見狀態,但是調用onStart()方法時Activity是在後臺,而調用onResume()方法時Activity是在前臺的。
5、onPause(): 表示Activity正在停止,這時候Activity的狀態是不可見的,但是還是顯示在前臺的;一般情況下,下一個生命周期的方法onStop()就會被調用。在這裡可以做一些存儲數據的操作,但不可以過於耗時,因為會影響Activity顯示的效果。
6、onStop(): 表示Activity即將停止,這時候Activity的狀態是不可見的,也不是顯示在前臺上瞭,在這裡可以做一些稍微重量級的回收工作,也不可以太耗時。
7、onDestroy(): 表示Activity即將被銷毀,這是Activity生命周期的最後一個方法,在這裡可以做一些資源的釋放。
下面以一張圖展示非異常情況下生命周期調用的方法
好瞭,前面分析瞭那麼多,我們來寫一個小demo看一下效果。
(1)、首先創建第一個Activity,名叫ActivityA,代碼如下所示:
var activityName: String? = "ActivityA" val TAG: String? = "Activity" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_a) Log.d(TAG,activityName + "---------onCreate") } override fun onRestart() { super.onRestart() Log.d(TAG,activityName + "---------onRestart") } override fun onStart() { super.onStart() Log.d(TAG,activityName + "---------onStart") } override fun onResume() { super.onResume() Log.d(TAG,activityName + "---------onResume") } override fun onPause() { super.onPause() Log.d(TAG,activityName + "---------onPause") } override fun onStop() { super.onStop() Log.d(TAG,activityName + "---------onStop") } override fun onDestroy() { super.onDestroy() Log.d(TAG,activityName + "---------onDestroy") } public fun onClick(v: View) { var clazz = ActivityB:: class.java var it: Intent = Intent(this,clazz) startActivity(it) }
對應的ActivityA的activity_a.xml文件如下所示:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:gravity="center" android:text="這是一個Activity,名字叫A" android:layout_height="wrap_content" /> <Button android:layout_width="match_parent" android:text="點擊此按鈕,可啟動新的Activity" android:onClick="onClick" android:layout_height="wrap_content" /> </LinearLayout>
(2)、創建另外一個Activity,名叫ActivityB,如下所示:
val TAG: String? = "Activity" var activityName: String? = "ActivityB" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_b) Log.d(TAG,activityName + "---------onCreate") } override fun onRestart() { super.onRestart() Log.d(TAG,activityName + "---------onRestart") } override fun onStart() { super.onStart() Log.d(TAG,activityName + "---------onStart") } override fun onResume() { super.onResume() Log.d(TAG,activityName + "---------onResume") } override fun onPause() { super.onPause() Log.d(TAG,activityName + "---------onPause") } override fun onStop() { super.onStop() Log.d(TAG,activityName + "---------onStop") } override fun onDestroy() { super.onDestroy() Log.d(TAG,activityName + "---------onDestroy") }
ActivityB對應的activity_b.xml的文件如下所示~~
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:text="這是一個Activity,名字叫B" android:gravity="center" android:layout_height="wrap_content" /> </LinearLayout>
第一次運行的結果如下所示~~~~
以下是相應的日志打印
01-08 11:48:39.068 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onCreate 01-08 11:48:39.069 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStart 01-08 11:48:39.069 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onResume
點擊“點擊此按鈕,可啟動新的Activity”按鈕,效果圖如下所示
相應的日志如下所示:
01-08 11:57:44.455 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onPause 01-08 11:57:44.465 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onCreate 01-08 11:57:44.466 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onStart 01-08 11:57:44.466 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onResume 01-08 11:57:44.843 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStop
點擊返回鍵,返回ActivityA,日志如下所示:
01-08 12:22:40.318 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onPause 01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onRestart 01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStart 01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onResume 01-08 12:22:41.125 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onStop 01-08 12:22:41.125 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onDestroy
由於技術水平有限,文章中難免會有錯誤,歡迎大傢批評指正,另外附上小demoActivity生命周期的方法調用過程,謝謝大傢的閱讀。~~~~
以上就是Android非異常情況下的Activity生命周期分析的詳細內容,更多關於Android Activity生命周期的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Android四大組件之Activity深入解讀生命周期
- Android入門教程之組件Activity的生命周期詳解
- Android實現顯示和隱藏密碼功能的示例代碼
- Android Activity的生命周期與加載模式超詳細圖文解析
- Android Activity生命周期調用的理解