14

如何防止在關閉屏幕時重新創建活動?防止在關閉屏幕時重新創建Android活動

我做什麼

  1. 開始Bejewels並轉到珠寶屏幕。
  2. 很快按下電源按鈕。屏幕關閉,但設備沒有。
  3. 再次按下電源按鈕。

我看到

在同一屏幕什麼的轉動屏幕關閉之前。

在我的應用程序(小事一樁,只是一個web應用程序與單一的WebView)方案的情況如下:

我做什麼

  1. 開始我應用程序。活動onCreate()方法將一個URL加載到WebView中。
  2. 很快按下電源按鈕。屏幕關閉,但設備沒有。
  3. 再次按下電源按鈕。

我看到

什麼的WebView被重新加載頁面。

我預計

如Bejewels情況下,我希望看到同樣的畫面,這對於我的應用程序在其先前的狀態頁面:腳本運行,表單字段 填充等

調試表明,我錯了(在前面的問題)和onDestroy()和onCreate()被稱爲一個接一個,當屏幕剛剛打開。由於我仍然聽到腳本播放的音樂,當屏幕關閉時,看起來活動和WebView都存在,直到我再次按下電源按鈕。

我試過了。

  1. android:alwaysRetainTaskState =「true」同樣的行爲。
  2. 閱讀有關意圖(無濟於事,我只是不明白,它們如何適用於我的情況)。
  3. 使用PhoneGap。它的行爲不同:只要按下電源按鈕就可以殺死整個應用程序。這是更好的,但不是最好的。

回答

1

地址:

android:launchMode="singleTop" 

在清單XML活動的一部分。 請參閱http://developer.android.com/guide/topics/manifest/activity-element.html

+0

沒有任何更改。 (我沒有刪除android:alwaysRetainTaskState =「true」)。 – noober

+0

按下電源按鈕屏幕關閉,然後再次屏幕onResume()被調用,你在做什麼onResume()? – Bush

+0

1.是,調用onResume()。我已經檢查了它(重寫並稱爲吐司)。 2.對不起,我只是沒有想到我必須在onResume()中做些什麼。所以,它沒有被覆蓋,現在它只包含Toast調用。 3.現在的行爲如下:第一次按下按鈕後,當屏幕關閉時,頁面在後臺重新加載(音樂停止播放,然後從開始播放,在啓動音樂的網頁的加載區中有一個JavaScript播放)。 – noober

28

這個問題的解決方案可能是一樣的,這裏描述:onDestroy gets called each time the screen goes on

這聽起來像您的活動正在重新啓動由於配置更改,請參閱http://developer.android.com/guide/topics/resources/runtime-changes.html 。最常見的情況是,您的應用處於橫向模式時(如大多數遊戲),然後通過點按電源按鈕進行屏幕鎖定。屏幕鎖定處於肖像模式,因此會觸發方向更改,從而觸發活動重新啓動。如果你的目標API級別小於13或者

android:configChanges="orientation|keyboardHidden|screenSize" 

android:configChanges="orientation|keyboardHidden" 

...您的清單文件......如果你是:

這種行爲可以通過增加覆蓋目標API級別大於13.

請注意,您可能需要執行project-> properties並更新您的項目構建目標。如果構建目標小於13,則不會識別'screenSize'。

它可能是導致活動重置的不同配置更改。以下鏈接提供了可能的配置更改列表:http://developer.android.com/guide/topics/manifest/activity-element.html#config