2012-08-09 145 views
0

如果用戶在我的活動處於前臺時重新啓動手機,手機重新啓動後,活動將自動再次彈出。我不希望發生這種情況,因爲我傳遞給活動的額外數據都沒有保存,所以活動沒有正確的顯示。防止在手機啓動時重新啓動活動?

顯然,即使在我的BroadcastReceiver啓動了android.intent.action.BOOT_COMPLETED意向過濾器之前,活動也已啓動。

我該如何去阻止手機啓動時自動啓動的活動?

編輯:我在我的活動過濾器中使用了android.intent.category.HOME類別,這顯然是它在重新啓動時啓動的原因。

+3

Android中的任何內容都不會在重新啓動時自動重新啓動您的活動,除非它是主屏幕。無論是你的主屏幕正在這樣做,或者你正在這樣做 - 而不是Android。 – CommonsWare 2012-08-09 15:55:44

+0

啊哈!那是問題的一部分。我爲這個活動使用了類別'android.intent.category.HOME'。有沒有辦法在啓動之前在重新啓動時禁用此活動,或者檢查它是否由於手機重新啓動而在活動內部啓動? 「 – 2012-08-09 15:57:41

+1

」我對此活動使用類別android.intent.category.HOME「 - 然後您是主屏幕,並且如果用戶將您設置爲默認主屏幕,則您應*重新啓動時啓動。 「有什麼辦法可以在啓動前重新啓動時禁用這個活動」 - 我想你可以嘗試監聽ACTION_SHUTDOWN廣播,然後使用PackageManager和setComponentEnabledSetting()來禁用活動......但是,將來需要重新啓用它。 – CommonsWare 2012-08-09 16:03:58

回答

1

ACTION_SHUTDOWN廣播應該在設備關閉時熄滅。我說「應該出去」,因爲它假定有序關閉。如果用戶按住POWER鍵約10秒鐘,或者彈出電池,我會認爲ACTION_SHUTDOWN未被廣播。

要控制組件(例如活動)是否可用,可以使用PackageManagersetComponentEnabledSetting()。禁用的組件無法運行,並且通常不可見(例如,禁用的應用程序小部件的<receiver>不會顯示在應用程序窗口小部件選取器中)。

從理論上講,可以將這兩者結合起來。然而,即使在最好的時候,我也會認爲ACTION_SHUTDOWN行爲是相當有時間限制的(所以要快點),並且您需要處理「無序」關機情況。