2013-05-01 103 views
10

當我的應用在「頂部」運行時鎖定屏幕時,系統幾乎立即調用onCreate(屏幕仍爲黑色)。這種破壞行爲的原因是什麼?鎖定屏幕後調用Android onCreate

+1

當屏幕方向發生變化時,會調用onCreate,當屏幕尺寸發生變化時,將調用Android的更高版本。很難說沒有發佈任何代碼或XML,爲什麼會發生這種情況。要停止在我的一些應用程序中調用onCreate',我在屏幕方向或大小改變時調用了'android:configChanges =「keyboardHidden | orientation | screenSize」'來調用我不想調用'onCreate'的活動。 – HeatfanJohn 2013-05-01 14:35:37

+0

+1 Downvoters應該添加一條評論,提供關於如何改善問題時的重要反饋,當downvoting時。 – HeatfanJohn 2013-05-01 14:37:35

回答

1

這是Android操作系統的工作原理,它決定何時銷燬您的視圖。當您鎖定手機時,您的應用會進入活動生命週期的暫停狀態(onPause)。

當活動處於暫停狀態,如果它需要大量的內存,Android系統已經幹掉你的應用程序(的onStop)的權利。

所以它必須調用onCreate重新創建您的視圖,當你解鎖它。當後屏幕會返回你看到桌面上(的onDestroy()關閉應用程序)

+1

當鎖定屏幕時,它實際上進入'onPause',然後到'onStop'。 – TronicZomB 2013-05-01 14:35:33

+0

我雖然我的意思是說你的應用程序進入暫停狀態 – user2336315 2013-05-01 14:36:44

+1

調用創建時系統要摧毀我的活動似乎不是很合乎邏輯... – user2224350 2013-05-01 14:39:04

0

的onDestroy()被調用。

屏幕之後又回來了,你看到你的應用程序的第一個佈局/視圖,然後這就是所謂的onStop()和的onCreate()。

後,屏幕又回來了,你看到屏幕前的相同觀點得好快的onPause()和onResume()被調用。

5

對於我來說,我

android:configChanges="orientation" 

但這並沒有幫助,因爲我的活動是全屏,所以我在活動標籤

添加

android:configChanges="keyboardHidden|orientation|screenSize" 

正如上文Handling the Configuration Change Yourself

如果y我們的應用程序不需要在特定配置更改期間更新資源,並且您有一個性能限制,要求您避免重新啓動活動,然後您可以聲明您的活動處理配置更改本身,從而防止系統重新啓動活動。

+0

這也是我的情況。 – realaboo 2016-05-20 13:05:49

+0

拯救生命。 configChanges =「orientation」在我的平板電腦上工作,但不在電話上。你的答案解決了這個 – Rodia 2017-02-22 16:44:16

0

這種情況如果活動是風景模式和鎖定屏幕是由用戶啓用。

可以有這背後有兩個原因:

  1. 如果任何類型的鎖屏啓用並活動在風景模式: 如果設備在人像模式中,鎖定屏幕時,該設備已被鎖定它會自動切換到肖像模式(即使您的活動處於風景模式)。當設備解鎖時,您的活動變得可見,但它仍然從肖像(鎖定時)轉換到橫向,因此活動將被銷燬並重新創建。

  2. 這是Android操作系統是如何工作的,它決定何時摧毀你的看法。當您鎖定手機時,您的應用會進入活動生命週期的暫停狀態(onPause)。 當活動處於暫停狀態時,如果需要大量內存,則系統有權終止您的應用(onStop,然後是onDestroy)。所以當你解鎖它時,系統調用(onCreate)來重新創建你的視圖。

解決方案:

  1. 你應該仔細保存和使用onSaveInstanceState()
  2. 使用android:configChanges="orientation|screenSize"中體現你的活動標籤檢查狀態。