如果满足特定条件,我将呼叫finish()。 但是,即使在finish()之后,如果按住主屏幕按钮,我仍然可以在那里看到我的应用程序。 如果终止进程不是理想的选择,我该怎么办?
这是我打电话给finish()的地方:
protected void onStart() {
.............
if(today.equals("..."))
finish();
};
我知道完成将完成活动,但是为什么它仍在任务管理器中可见? 我完成了
finish()只是杀死Activity,而不是整个应用程序。 你想做什么? 为什么需要它消失?
但我的应用只有一个活动。 仅Main.java。
是的,但是有一个包含所有活动的进程,即使您只有一个活动,也就是仍在运行的活动。
这个问题可能会有所帮助
事实是,按住主页按钮打开任务管理器时,用户可以看到带有进度条的应用程序,就像不是很专业地在应用程序任务管理器中显示应用程序内的进度条
finishAndRemoveTask()是根据文档提供的新API
"完成此任务中的所有活动,并将其从最近的任务列表中删除。"
if(android.os.Build.VERSION.SDK_INT >= 21)
{
finishAndRemoveTask();
}
else
{
finish();
}
按住(并按住)HOME按钮不会打开任务管理器。这是某种"最近使用的应用程序"部分,向您显示最近打开的应用程序。实际上,它比这聪明一些-它可以恢复上次访问的活动,但是由于您只有一个活动,因此这对您来说并不重要
因此,基本上,即使您可以在此列表中看到您的应用程序,也并不意味着它实际上正在运行。
唯一正确和确切的答案是票数更少的答案(至少到现在为止)! 您获得了我的投票!
查找了退出onDestroy()中的应用程序onDestroy()或finish()或android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy();的不同方法后,所有这些都导致了这种现象。 我很高兴看到活动不在堆栈中,而只是藏在最近的应用程序列表中。 谢谢!+1
尽管最近的人员确实不是一个任务管理器,这确实错过了Srikant提出的要点,即finish()并非设计上通常会导致过程终止。
If killing the process is not a desirable option, what should I do?
没什么,最有可能的。
I know that finish will finish the activity but why is it still visible in the task manager?
首先,您的进程仍在运行。这是一项优化,因此,如果用户选择立即返回您的应用程序,或者其他原因触发了您的应用程序代码(例如AlarmManager),则Android不必立即浪费CPU和电池为您分配另一个进程。如果认为合适,Android将终止您的流程。
请注意,根据您认为"任务管理器"的不同,即使您的进程已终止,您的应用也可能会出现在该处。例如,长按HOME或按RECENTS按钮将显示"最近任务",其中包括已终止过程的任务。
it's like not really professional showing the progress bar within the app in the application task manager
我不知道你为什么会这样想。就是说,欢迎您在活动中覆盖onCreateThumbnail(),以返回其他用于缩略图的内容。
finish()告诉android系统您已经完成。由Android系统决定何时实际终止您的应用程序。只要操作系统不需要资源,它就可以保留您的应用程序。对于操作系统,将应用程序保留在RAM中比重新启动应用程序便宜。对于大多数现代OS,此策略都是正确的。
我想我明白了。
就像@Pavel Dudka提到的那样,长按主页按钮不会打开任务管理器,而只是打开最近启动的应用程序列表(至少在我所看到的手机上)。
进程保持在S挂起状态:
PID USER VSZ STAT COMMAND
--- ---- --- ---- -------
5846 root 0 SW< [ksdioirqd/mmc1]
5853 u0_a76 306m S {android.youtube} com.google.android.youtube
5897 root 1852 S /sbin/sh -
5922 u0_a79 286m S {om.me.mygdxgame} com.me.mygdxgame
5947 u0_a49 278m S {roid.dspmanager} com.bel.android.dspmanager
5965 root 1844 R ps -w
即使所有活动都已关闭。
当有足够的空间时,将内容加载到RAM中并没有什么害处。易失性RAM IC的功耗为空或满。挂起的进程不会占用CPU。当需要空间时,这些过程将终止。在此之前,它们可以快速恢复,并使操作系统更快。
您需要寻找正在运行的进程的情况是:
管理不善的线程失控。您启动了一个运行循环的线程,不知道循环将永远结束,并且最重要的是松开了对该循环的所有引用。
服务实施不善,而且经常发生泄漏。向系统管理员/服务注册服务,而忘记注销。
系统进程通过Runtime.exec()运行,而忘记在它们上调用destroy()。
如果您只是在处理简单的Android组件,并且已经正确实现了它们的生命周期。您无需担心内部流程。