正如已经指出的正确的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