正如已經指出的正確的android重新啓動您的應用程序。這與您的應用程序在後臺時的行爲相同,因爲使用更多內存,系統會殺死您的應用程序。 當您回到應用程序時,會發生什麼情況是重新創建了最後一個活動包含片段。
通常啓動屏幕(啓動畫面)用於初始化應用程序。 一旦應用程序初始化(例如服務,viewmodel已準備就緒),啓動活動將切換到主要活動。
當應用程序被重新創建(例如撤消權限)時,許多應用程序會發生常見的崩潰,因爲應用程序未初始化並且使用的服務或視圖模型爲空。 我不認爲有一種方法可以避免應用程序重新啓動後最後一次活動的重新創建。
你可以做的是檢查應用程序是否被初始化,否則切換到啓動活動並初始化應用程序。 請注意,您必須處理活動中的單元化應用程序以及碎片。
Xamarin示例代碼:
if (!((MyApplication)ApplicationContext).IsInitialized)
{
Intent intent = new Intent(Application.Context,typeof(StartupActivity));
intent.SetFlags(ActivityFlags.NewTask);
StartActivity(intent);
Finish();
}
只要base.onCreate被稱爲創建所述片段所以即使是提供「解決方法」從ACS-球隊沒有避免最後一個片段的娛樂。
利用上述提供的樣本代碼的生命週期將在殼體的活性有片段:
- 撤銷許可的應用程序就會被殺死
- 重新啓動應用程序
- 應用的OnCreate
- LastActivity.OnCreate
- LastFragment.OnAttach
- LastFragment.OnCreate
- LastFragment.OnCreateView
- LastFragment.OnViewCreated
- LastFragment.OnDestroy
- LastFragment.OnDettach
- LastActivity.OnDestroy
- StartupActivity.OnCreate
通過您還可以測試應用程序的方式重新啓動亞行外殼:
打開你的應用程序,然後去和固醇主屏幕,以使您的應用程序在後臺
adb shell "ps | grep <com.yourpackage>" // get the app process id
adb shell run-as <com.yourpackage> kill <app-process-id> // kill the app
啓動您的應用程序再次在該圖標或近期任務
「機器人從來沒有去在onStart(片段或活動)!並且永遠不會再去那裏。「 - 如果用戶從設置中撤消權限,則Android會終止您的過程。如果Android在任何其他原因終止您的進程,並且您處於後臺,則以同樣的方式處理此問題。 – CommonsWare
感謝您的回答!我繼續調查,當我創建我的活動時,我顯示1片段,如果我更改權限並返回應用程序,則有2個片段(權限更改之前和之後的片段)。片段是否保留? –
「你知道爲什麼要保留舊的片段嗎?」 - 因爲你的任務仍然非常出色,所以Android正在重新創建活動並盡其所能地恢復其狀態,創建任何現有的片段,如果您進行配置更改(例如,旋轉屏幕),您將獲得相同的結果,因爲您的活動將被銷燬並默認重新創建。它。 – CommonsWare