天天看點

activity生命周期_Android一些特殊情況下的生命周期分析

activity生命周期_Android一些特殊情況下的生命周期分析

如今網際網路發展越來越成熟,面試的考察點也越來越細,網上的資料也是魚龍混雜,都是比較零碎的,這裡我收集一些線上教育訓練的視訊資料,這個比較系統化的,對于開發者的提升是有所幫助的,你需要的時候随時從收藏夾打開看看,了解到位了,自然就掌握了。   

一些特殊情況下的生命周期分析

Activity 的橫豎屏切換

與橫豎屏生命周期函數有關調用的屬性是"android:configChanges",關于它的屬性值設定影響如下: orientation:消除橫豎屏的影響 keyboardHidden:消除鍵盤的影響 screenSize:消除螢幕大小的影響當我們設定 Activity 的 android:configChanges 屬性為 orientation 或者orientation|keyboardHidden 或者不設定這個屬性的時候,它的生命周期會走如下流程:

剛剛啟動 Activity 的時候:

onCreate

onStart

onResume

由豎屏切換到橫屏:

onPause

onSaveInstanceState //這裡可以用來橫豎屏切換的儲存資料

onStop

onDestroy

onCreate

onStart

onRestoreInstanceState//這裡可以用來橫豎屏切換的恢複資料

 onResume

 橫屏切換到豎屏:

onPause

onSaveInstanceState

onStop

onDestroy

 onCreate

onStart

onRestoreInstanceState

 onResume

當我們設定 Activity 的 android:configChanges 屬性為 orientation|screenSize 或者orientation|screenSize|keyboardHidden

剛剛啟動 Activity 的時候:

 onCreate

 onStart

onResume

 由豎屏切換到橫屏:

 什麼也沒有調用

 橫屏切換到豎屏:

 什麼也沒有調用

而且需要注意一點的是設定了 orientation|screenSize 屬性之後,在進行橫豎屏切換的時候調用的方法是 onConfigurationChanged(),而不會回調 Activity 的各個生命周期函數;當然在顯示中我們可以屏蔽掉橫豎屏的切換操作,這樣就不會出現切換的過程中 Activity生命周期重新加載的情況了,具體做法是,在 Activity 中加入如下語句:

1. android:screenOrientation="portrait" 始終以豎屏顯示

2. android:screenOrientation="landscape" 始終以橫屏顯示

如果不想設定整個軟體屏蔽橫豎屏切換,隻想設定屏蔽某個 Activity 的橫豎屏切換功能的話,隻需要下面操作:

1. Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

以豎屏顯示

2. Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);以橫屏顯示最後提一點,當你橫豎屏切換的時候,如果走了銷毀 Activity 的流程,那麼需要儲存目前和恢複目前 Activity 的狀态的話,我們可以靈活運用 onSaveInstanceState()方法和onRestoreInstanceState()方法。

 什麼時候 Activity 單獨走 onPause()不走 onStop()

關于這個特殊情況,當 Activity 被另一個透明或者 Dialog 樣式的 Activity 覆寫時的狀态。此時它依然與視窗管理器保持連接配接,系統繼續維護其内部狀态,是以它仍然可見,但它已經失去了焦點故不可與使用者互動,是以被覆寫的Activity并不會執行onStop()方法。

什麼時候導緻 Activity 的 onDestory()不執行?

當使用者背景強殺應用程式時,目前傳回棧僅有一個 activity 執行個體時,這時候,強殺,是會執行 onDestroy 方法的;當傳回棧裡面存在多個 Activity 執行個體時,棧裡面的第一個沒有銷毀的 activity 執行會 ondestroy 方法,其他的不會執行;比如說:從 mainactivity 跳轉到activity-A(或者繼續從 activity-A 再跳轉到 activity-B),這時候,從背景強殺,隻會執行 mainactivity 的 onDestroy 方法,activity-A(以及 activity-B)的 onDestroy 方法都不會執行;

連結:https://pan.baidu.com/s/1pCuocfIiaCYAXAQ2qoT7pg

提取碼:l17s

Android進階開發教程

連結:https://pan.baidu.com/s/1xDuiq71x-U6QX2q9t5BZXg

提取碼:5xyr

activity生命周期_Android一些特殊情況下的生命周期分析
activity生命周期_Android一些特殊情況下的生命周期分析
activity生命周期_Android一些特殊情況下的生命周期分析

更多資料通過關注公衆号

activity生命周期_Android一些特殊情況下的生命周期分析

也可以通過留言的方式

上一篇:Android中的JNI開發,你了解多少?

繼續閱讀