如已指出,正确的Android会重新启动您的应用程序。这与您的应用程序在后台时,系统由于使用更多内存而杀死应用程序的行为相同。
当您返回到应用程序时,最后一个活动包括片段将被重新创建。
通常使用启动屏幕(闪屏)来初始化应用程序。
一旦应用程序初始化完成(例如服务、视图模型已准备就绪),启动活动就会切换到主活动。
许多应用程序在重新创建应用程序(例如撤销权限)时发生崩溃,因为应用程序未初始化,使用的服务或视图模型为空。
我认为没有办法避免在应用程序重新启动后重新创建最后一个活动。
您可以做的是检查应用程序是否已初始化,否则切换到启动活动并初始化应用程序。
请注意,您必须在活动和片段中处理未初始化的应用程序。
Xamarin示例代码:
if (!((MyApplication)ApplicationContext).IsInitialized)
一旦调用base.onCreate,片段就会被创建,因此即使acs-team提供的“解决方法”也无法避免最后一个片段的重建。
如果活动有一个片段,则上述提供的示例代码的生命周期将如下所示:
- 撤销权限应用程序被杀死
- 重新启动应用程序
- 应用程序OnCreate
- LastActivity.OnCreate
- LastFragment.OnAttach
- LastFragment.OnCreate
- LastFragment.OnCreateView
- LastFragment.OnViewCreated
- LastFragment.OnDestroy
- LastFragment.OnDettach
- LastActivity.OnDestroy
- StartupActivity.OnCreate
顺便说一句,您也可以通过adb shell测试应用程序重启:
打开您的应用程序,然后转到Android主屏幕,以便您的应用程序在后台运行
adb shell "ps | grep <com.yourpackage>" // get the app process id
adb shell run-as <com.yourpackage> kill <app-process-id> // kill the app
通过图标或最近任务重新启动您的应用程序。