首页 > 解决方案 > Android - System.exit(0) 并重新启动活动和服务

问题描述

我正在制作一个 Android 应用程序,我需要立即完全重启该应用程序。所以,要做到这一点,唯一有效的解决方案(我记得)是使用 System.exit(0)。我不知道为什么我有这段代码(我不记得我为什么尝试它或我在哪里看到它或者这只是一个意外),但我知道它正在工作,现在我正在审查代码以将此应用于服务,它没有启动我想要的活动(一个将完全停止应用程序并从零重新启动服务的活动 - 或者一个会做同样事情的服务,但没有调用该服务,也没有活动,所以我不知道它是否通过调用服务来工作 - 我知道它工作的活动,至少来自另一个活动):

Intent MainRestarter= new Intent();
MainRestarter.setClass(MainActivity.this, MainRestarter.class);
MainRestarter.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
MainRestarter.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(MainRestarter);
System.exit(0);
Intent MainActivity = new Intent();
MainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
MainActivity.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
MainActivity.setClass(MainRestarter.this, MainActivity.class);
startActivity(MainActivity);
finish();

但我测试过,它也适用于:

Intent MainActivity = new Intent();
MainActivity.setClass(MainActivity.this, MainActivity.class);
MainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
MainActivity.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(MainActivity);
System.exit(0);

从另一个线程的答案(finish() 和 System.exit(0) 之间的区别):

“System.exit(0) - 重新启动应用程序,在堆栈上少一个活动。因此,如果您从 ActivityA 调用 ActivityB,并且在 ActivityB 中调用 System.exit(0),那么应用程序将被终止并立即启动只有一个活动 ActivityA” - 这里的区别是(使用那里的名称)我从 ActivityA 调用 ActivityB,然后在 ActivityA 上调用 System.exit(0),然后它使用 ActivityB 重新启动。但这不适用于服务,不知道为什么......

我认为这应该只是停止整个应用程序,但在阅读了那个答案后,我感到很困惑。顺便说一句,它只有在我调用 startActivity() 时才有效,否则应用程序将完全关闭。谁能解释我为什么这段代码有效,然后解释为什么我在服务中尝试完全相同的代码时它不起作用?

提前致谢!

编辑:我知道我可以在 System.exit(0) 之前调用 AlarmManager,但我只想知道为什么会这样,以及我是否可以继续使用它而不是 AlarmManager(在 MainActivity 上,因为在服务上,由于某种原因,上述方法不起作用,如果有人知道,我也想知道为什么),因为我读到它会消耗更多电池。

标签: javaandroidsystem.exit

解决方案


推荐阅读