Android復習(六)核心組件—>Activity 簡介、生命周期、狀態變更
1. 可以在activity上聲明權限,來保證只在進入某個activity是否有某種權限
<manifest>
<activity android:name="...."
android:permission=”com.google.socialapp.permission.SHARE_POST”
/>
2.生命周期流程圖
3.activity狀態和內存中彈出
系統永遠不會直接終止 Activity 以釋放內存,而是會終止 Activity 所在的進程。系統不僅會銷毀 Activity,還會銷毀在該進程中運行的所有其他內容。
| 系統終止進程的可能性 | 進程狀態 | Activity 狀態 |
|---|---|---|
| 小 | 前臺(擁有或即將獲得焦點) | 已創建 已開始 已恢復 |
| 中 | 后臺(失去焦點) | 已暫停 |
| 大 | 后臺(不可見) | 已停止 |
| 空 | 已銷毀 |
4. 保存數據和回復數據
當activity銷毀時,應該調用 onSaveInstanceState()
當需要恢復數據時,應該調用 onRestoreInstanceState() 而不要在onCreat中處理這些事情,雖然得到的bundle對象是相同的
5. Activity狀態變更
5.1 配置發生了改變
有很多事件會觸發配置更改。最顯著的例子或許是橫屏和豎屏之間的屏幕方向變化。其他情況,如語言或輸入設備的改變等,也可能導致配置更改。
當配置發生更改時,Activity 會被銷毀并重新創建。原始 Activity 實例將觸發 onPause()、onStop() 和 onDestroy() 回調。系統將創建新的 Activity 實例,并觸發 onCreate()、onStart() 和 onResume() 回調。
結合使用 ViewModels、onSaveInstanceState() 方法和/或持久性本地存儲,可使 Activity 的界面狀態在配置發生更改后保持不變。在決定這些選項的組合方式時,需要考慮界面數據的復雜程度、應用的用例以及檢索速度與內存使用的權衡。有關保存 Activity 界面狀態的詳情,請參閱保存界面狀態。
5.2 處理多窗口的情況
一旦應用進入多窗口模式(適用于 Android 7.0(API 級別 24)及更高級別),系統會向當前運行的 Activity 發送配置更改通知,從而完成上述生命周期轉換。如果已經處于多窗口模式的應用調整了大小,也會出現這種行為。您的 Activity 可以自行處理配置更改,也可以讓系統銷毀 Activity 并使用新維度重新創建一個。
有關多窗口模式生命周期的詳情,請參閱多窗口模式支持頁的多窗口模式生命周期部分。
在多窗口模式下,雖然用戶可以看到兩個應用,但只有與用戶交互的應用位于前臺且具有焦點。該 Activity 處于“已恢復”狀態,而另一個窗口中的應用則處于“已暫停”狀態。
當用戶從應用 A 切換到應用 B 時,系統會對應用 A 調用 onPause(),對應用 B 調用 onResume()。每當用戶在應用之間切換時,系統就會在這兩種方法之間切換。
有關多窗口模式的詳情,請參閱多窗口模式支持。
5.3 Activity或對話框顯示在前臺
如果有新的 Activity 或對話框出現在前臺,并且局部覆蓋了正在進行的 Activity,則被覆蓋的 Activity 會失去焦點并進入“已暫停”狀態。然后,系統會調用 onPause()。
當被覆蓋的 Activity 返回到前臺并重新獲得焦點時,會調用 onResume()。
如果有新的 Activity 或對話框出現在前臺,奪取了焦點且完全覆蓋了正在進行的 Activity,則被覆蓋的 Activity 會失去焦點并進入“已停止”狀態。然后,系統會快速地接連調用 onPause() 和 onStop()。
當被覆蓋的 Activity 的同一實例返回到前臺時,系統會對該 Activity 調用 onRestart()、onStart() 和 onResume()。如果被覆蓋的 Activity 的新實例進入后臺,則系統不會調用 onRestart(),而只會調用 onStart() 和 onResume()。
注意:當用戶點按“概覽”或主屏幕按鈕時,系統的行為就好像當前 Activity 已被完全覆蓋一樣。
5.4 用戶點擊返回按鈕
如果 Activity 位于前臺,并且用戶點按了返回按鈕,Activity 將依次經歷 onPause()、onStop() 和 onDestroy() 回調。活動不僅會被銷毀,還會從返回堆棧中移除。
需要注意的是,在這種情況下,默認不會觸發 onSaveInstanceState() 回調。此行為基于的假設是,用戶點按返回按鈕時不期望返回 Activity 的同一實例。不過,您可以通過替換 onBackPressed() 方法實現某種自定義行為,例如“confirm-quit”對話框。
如果您替換 onBackPressed() 方法,我們仍然強烈建議您從被替換的方法調用 super.onBackPressed()。否則,返回按鈕的行為可能會讓用戶感覺突兀。
5.5 系統終止應用程序
6.

浙公網安備 33010602011771號