当我处于子活动中时,任务杀手会杀死应用程序,如果我重新启动应用程序,它会从子活动和崩溃开始。 如何在应用程序重新启动时从根活动开始而不是从子活动开始?如何在应用程序重新启动时从根活动开始,而不是从子活动开始?
回答
要做到这一点,最简单的办法就是
android:clearTaskOnLaunch="true"
添加到activity
定义清单为你的“根”活动(ACTION = MAIN和CATEGORY = DEFAULT)。
但是,如果用户离开它然后返回到它(即使Android没有终止您的应用程序的进程),它将始终从头开始您的应用程序。
执行此操作的更复杂的方法是使用public static boolean
变量,该变量设置为您的“根”活动的onCreate()
中的true
。如果这个变量是true
,那意味着你的“根”活动已经开始。然后,您需要在所有其他活动的onCreate()
中测试此标志,如果该变量为false
这意味着Android会终止您的流程并重新创建它并启动另一个活动(而不是“根”活动)。在这种情况下,你应该回重定向到你的“根”的活动是这样的:
Intent intent = new Intent(this, MyRootActivity.class);
startActivity(intent);
finish();
return;
我没有尝试,因为我发现崩溃的原因。但我认为第二种方法是有效的。 – user3152056
这可能会实现: 在你的子活动的的onStop和的onDestroy,把下面的代码
Intent intent = getIntent();
intent = null;
此答案无用。当应用程序进程被终止时,它被终止。它不再存在。 'onStop()'和'onDestroy()'不会被调用。当用户再次启动应用程序时,Android会记住哪个活动处于顶部并重新启动该活动。这是正常的,你的答案不会改变这一点。 –
@DavidWasser:David android重新启动该活动,但它以相同的意图重新启动活动。这就是为什么我认为这可以工作。是的,你可能是对的onDestroy可能不会被调用,所以写这两行的位置可能不同,这就是我的想法。如果你可以在android杀死一个活动时分享生命周期的更多细节。 – theJango
当你像这样调用'getIntent()'时,它将一个名为'intent'的局部变量设置为对'Intent'的引用。然后,您将此局部变量设置为null。你认为这将完成什么? –
- 1. 从应用程序重新启动的主要活动开始
- 2. 从开始开始活动
- 3. 活动未开始;另一项活动是开始而不是
- 4. 如何从singleInstance活动开始活动?
- 5. 活动图重构 - 应从初始活动开始?
- 6. 从线程开始活动
- 7. 从服务开始的Android开始活动,但不启动应用程序的其他活动
- 8. 开始活动在移动重启
- 9. 开始新的子活动从的ListView
- 10. 开始活动,而在活动创建
- 11. 如果从其他活动开始活动,则启动方法
- 12. 重置活动堆栈而不开始新活动
- 13. 从非活动开始活动
- 14. 每次启动应用程序时开始活动
- 15. Android。如何开始活动而不创建新活动?
- 16. 如何强制Android始终从启动器活动开始
- 17. 更改Android开始活动后,应用程序不会启动
- 18. 从片段的意图开始活动开始空白活动
- 19. 如何不从通知开始活动
- 20. 不开始新的活动
- 21. 如何从tabview中的列表活动开始新的活动
- 22. 如何从集成的google api开始新的活动活动
- 23. 从应用程序启动而不是活动启动服务
- 24. 不是从意图开始活动
- 25. 从LockScreen开始活动
- 26. 从活动开始片段
- 27. 从通知开始活动
- 28. 从活动开始BroadCastReceiver
- 29. 从活动开始DialogFragment
- 30. 从RemoteViewsFactory开始活动
请尽量阅读清单文件,并检查您使用<意图过滤器> <操作机器人:名字=“机器人.intent.action.MAIN“/> intent-filter>在您的根活动标签内。 –
Srinivasan
我已经这样做了。 – user3152056