當我的應用在「頂部」運行時鎖定屏幕時,系統幾乎立即調用onCreate(屏幕仍爲黑色)。這種破壞行爲的原因是什麼?鎖定屏幕後調用Android onCreate
回答
這是Android操作系統的工作原理,它決定何時銷燬您的視圖。當您鎖定手機時,您的應用會進入活動生命週期的暫停狀態(onPause)。
當活動處於暫停狀態,如果它需要大量的內存,Android系統已經幹掉你的應用程序(的onStop)的權利。
所以它必須調用onCreate重新創建您的視圖,當你解鎖它。當後屏幕會返回你看到桌面上(的onDestroy()關閉應用程序)
當鎖定屏幕時,它實際上進入'onPause',然後到'onStop'。 – TronicZomB 2013-05-01 14:35:33
我雖然我的意思是說你的應用程序進入暫停狀態 – user2336315 2013-05-01 14:36:44
調用創建時系統要摧毀我的活動似乎不是很合乎邏輯... – user2224350 2013-05-01 14:39:04
的onDestroy()被調用。
屏幕之後又回來了,你看到你的應用程序的第一個佈局/視圖,然後這就是所謂的onStop()和的onCreate()。
後,屏幕又回來了,你看到屏幕前的相同觀點得好快的onPause()和onResume()被調用。
對於我來說,我
android:configChanges="orientation"
但這並沒有幫助,因爲我的活動是全屏,所以我在活動標籤
添加
android:configChanges="keyboardHidden|orientation|screenSize"
正如上文Handling the Configuration Change Yourself
如果y我們的應用程序不需要在特定配置更改期間更新資源,並且您有一個性能限制,要求您避免重新啓動活動,然後您可以聲明您的活動處理配置更改本身,從而防止系統重新啓動活動。
這種情況如果活動是風景模式和鎖定屏幕是由用戶啓用。
可以有這背後有兩個原因:
如果任何類型的鎖屏啓用並活動在風景模式: 如果設備在人像模式中,鎖定屏幕時,該設備已被鎖定它會自動切換到肖像模式(即使您的活動處於風景模式)。當設備解鎖時,您的活動變得可見,但它仍然從肖像(鎖定時)轉換到橫向,因此活動將被銷燬並重新創建。
這是Android操作系統是如何工作的,它決定何時摧毀你的看法。當您鎖定手機時,您的應用會進入活動生命週期的暫停狀態(onPause)。 當活動處於暫停狀態時,如果需要大量內存,則系統有權終止您的應用(onStop,然後是onDestroy)。所以當你解鎖它時,系統調用(onCreate)來重新創建你的視圖。
解決方案:
- 你應該仔細保存和使用
onSaveInstanceState()
或 - 使用
android:configChanges="orientation|screenSize"
中體現你的活動標籤檢查狀態。
- 1. 從鎖定屏幕調用onCreate()
- 2. 鎖定屏幕在Android中
- 3. Android鎖定屏幕方向並離開onCreate()未觸及
- 4. 鎖定屏幕上的Android鎖定屏幕/媒體控件
- 5. 如何鎖定屏幕Android
- 6. 在屏幕鎖定和解鎖後不會調用onStop和onStart android 2.3
- 7. 屏幕鎖定和解鎖
- 8. Android解鎖屏幕,然後重新鎖定屏幕(Nook簡單觸摸)
- 9. 屏幕鎖定Contineously
- 10. 屏幕鎖定應用程序調用
- 11. 使用python調用鎖定屏幕
- 12. Android自定義鎖定屏幕密碼
- 13. 鎖定屏幕
- 14. 鎖定屏幕
- 15. Android應用程序鎖定屏幕
- 16. Android:解鎖屏幕
- 17. 鎖定屏幕後運行的Android應用程序
- 18. 屏幕鎖定後重置計時器
- 19. 什麼是調用「選擇屏幕鎖定」屏幕的意圖?
- 20. 在鎖定屏幕上切換活動顯示鎖定屏幕
- 21. 解鎖屏幕後的Android調用活動
- 22. Android:用於鎖定屏幕/主屏幕的Espresso測試
- 23. 確定鎖定屏幕已解鎖
- 24. Android鎖定屏幕在禁用後再次顯示(使用lock.disableKeyguard())
- 25. 鎖定MFC屏幕
- 26. vb6鎖定屏幕
- 27. Android:onRestoreInstanceState在屏幕喚醒(並鎖定)後未調用
- 28. Android活動onDestroy()在屏幕鎖定上調用
- 29. 在Android中鎖定屏幕時不會調用BroadcastReceiver
- 30. Android onStop onDestroy onCreate後調用
當屏幕方向發生變化時,會調用onCreate,當屏幕尺寸發生變化時,將調用Android的更高版本。很難說沒有發佈任何代碼或XML,爲什麼會發生這種情況。要停止在我的一些應用程序中調用onCreate',我在屏幕方向或大小改變時調用了'android:configChanges =「keyboardHidden | orientation | screenSize」'來調用我不想調用'onCreate'的活動。 – HeatfanJohn 2013-05-01 14:35:37
+1 Downvoters應該添加一條評論,提供關於如何改善問題時的重要反饋,當downvoting時。 – HeatfanJohn 2013-05-01 14:37:35