我正在制作一个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);
从另一个主题(Difference between finish() and 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上,因为该服务,由于某种原因,上述方法不起作用,我也想知道为什么有人知道),因为我阅读它会消耗更多电池。