1. 程式人生 > >當activity改變時,我們如何處理它

當activity改變時,我們如何處理它

速度 change 假設 IT super conf In develop aras

用戶和系統觸發-的事件,可能造成一個activity狀體的改變。這個文檔描述了一些常見的情況,和如何去處理這些改變。

原網站:https://developer.android.google.cn/guide/components/activities/state-changes

這篇文章包括:

配置改變發生,

處理多窗口實例,

Activity或者dialog顯示在前端(foreground),

當用戶按下back鍵,

系統殺死app進程

1. 配置改變發生

有一些事件可以觸發配置的改變。最經典的莫過於手機方向的變化。改變語言或者輸入設備也會改變配置。

當配置改變發生時,activity先輩毀滅,然後再被創建。原activity會依次調用onPause(),onStop(),onDestory()回調方法。一個新的activity然後被創建,一次會調用onCreate(),onStart(),onResume()方法

在配置變化的過程中,使用viewModel,onSaveInstanceState,當地存儲 共同去保存activity的UI狀態。決定如何去結合使用這些方法,依賴於你的UI數據,app的用例,和檢索速度與內存使用的考慮。

關於更多的信息,可以看https://developer.android.google.cn/guide/components/activities/activity-lifecycle.html

ViewModel可以幫助你管理生命周期,可以看https://developer.android.google.cn/topic/libraries/architecture/viewmodel.html了解更多

2. 處理多窗口實例

當app進入多窗口模式模式,在android7.0(api level 24)版本或者更高版本可以使用,系統會通知當前activity配置發生改變,使用上述步驟調用生命周期方法。如果已經處於多窗口模式,調整邊界大小也會引發配置改變。

更多處理多窗口生命周期方法可以看https://developer.android.google.cn/guide/topics/ui/multi-window.html

在多窗口模式中,盡管有多個app顯示,只有一個app是獲得焦點能夠和用戶 交互的。可以交互的app處於運行狀態,另外的處於暫停狀態。

當用戶從當前app跳轉到另一個app,系統會調用onPause方法對當前app,對另一個app調用onResume方法。

3. Activity或者dialog顯示在前端(foreground)

如果一個新的activity或者dialog顯示在前端,獲取焦點並且部分顯示在當前activity的前面。被覆蓋的activity會喪失焦點進入暫停 狀態。

當被覆蓋的activity返回到前端再次獲取焦點,會調用onResume方法

如果完全覆蓋,會調用onPause和onStop方法。

當完全被覆蓋的同一個activity實例返回到前端時,會調用onRestart,onStart,onResume方法。

當完全被覆蓋的一個新的activity實例返回到前端時,對調用onStart,onResume

註意:用戶按下button和完全覆蓋的表現一樣。

4. 當用戶按下back鍵

如果用戶按下back鍵,activity會經歷onPause,onStop,onDestory方法。除了被毀滅外,這個activity還會從棧中被移除.

這是十分重要的去註意,在這種情況下,onSaveInstanceState方法不會被調用。這是基於一個假設,用戶按下返回鍵不會再次返回。但是,你可以重寫onBackPressed方法去實現一些定制的行為,例如一個confirm-quit dialog。

如果你重寫這個方法,推薦在你重寫的方法中調用super.onBackPressed

方法,否則當用戶按下back按鈕時,可能會有感到不友好的感覺。

5. 系統殺死app進程

如果app在前端運行,系統需要為他獲取更多的內存,處於後臺的app可能會被殺死釋放內存。

關於更多https://developer.android.google.cn/guide/components/activities/activity-lifecycle.html#asem

https://developer.android.google.cn/guide/components/activities/activity-lifecycle.html#saras

當activity改變時,我們如何處理它