我正在构建一个Android应用程序,它启动一个在后台运行的服务。当用户使用“主页”按钮关闭其中一个活动(与服务通信),然后再次导航到应用程序时,他们将获得最后一个活动。这是正确的行为。
但是,当我明确停止服务时(通过菜单中的选项),应用程序应该“退出”。目前,其工作方式如下:
stopService(new Intent(this, MyService.class));
finish();
// just go to to the home screen, as it is intended in Android
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
并且工作正常。但是,当我现在再次导航到应用程序时,它会启动先前打开的活动。我想要的是它再次启动启动活动(启动器)。
我怎么能做到这一点?
答案 0 :(得分:0)
如果您查看android:excludeFromRecents
的说明,请说:
Whether or not the task initiated by this activity should be excluded from the list of recently used applications ("recent apps").
这不是你想要的吗?一旦用户点击退出,此应用程序将不会在最近使用的应用程序中,因此将从内存中完全删除? :)
答案 1 :(得分:0)
我认为在退出时从内存中删除'应用程序'不是问题。即使您停止服务,该过程也可能留在内存中 - 这是系统的决定。
您想要一个明确的自定义行为 - 用户从菜单中选择“退出”选项 - >下一个应用程序启动从主活动开始 - 因此您需要明确处理此问题。
默认行为是用户在重新启动时返回上一个活动。因此,如果他们通过您的活动“退出”退出,他们只会返回主要活动。您使用“退出”菜单选项是非标准的(并不是说它很糟糕)。
一种选择是通过自己的活动进行退出。也许现在你刚刚完成当前的活动,你应该完成后台堆栈中的所有活动。
另一种选择是你可以保存一个标志,当再次启动UI时,你可以读取该标志并启动相应的活动(但再次注意后台堆栈)。设置该标志的最简单方法可能是重写onSaveInstanceState(Bundle),然后在onCreate中读取包(或使用sharedpreferences)。
答案 2 :(得分:0)
您是否尝试过为主要活动设置clearTaskOnLaunch至true
(在您的清单中)。
When the value is "true", every time users start the task again, they are brought to its root activity regardless of what they were last doing in the task and regardless of whether they used the Back or Home button to leave it.
这似乎描述了你想要做的事情。我个人从未尝试过,但似乎值得为你的目的进行调查。
答案 3 :(得分:0)
System.exit(0);
但是您应该只有一个活动处于堆栈中。