为什么我的应用程序在完成后仍可在任务管理器中看到

时间:2013-06-06 16:28:44

标签: android

如果满足某个条件,我正在调用finish()。但是,即使在finish()之后,如果我按住主页按钮,我仍然可以在那里看到我的应用程序。如果杀死这个过程不是一个理想的选择,我该怎么办?

这是我打电话给finish()的地方:

    protected void onStart() {
.............
if(today.equals("..."))
finish();

    };

我知道完成将完成活动,但为什么它仍然可以在任务管理器中看到?我已经完成了。

5 个答案:

答案 0 :(得分:9)

按住(并按住)HOME按钮不会打开任务管理器。这是某种“最近的应用”部分,它显示了您最近打开的应用。实际上它比这更聪明 - 它可以恢复上次访问的活动,但由于你只有一个活动,这对你来说不是很重要

所以基本上即使你可以在这个列表中看到你的应用程序,但这并不意味着它实际上正在运行。

答案 1 :(得分:9)

finishAndRemoveTask()是根据文档提供的新API “完成此任务中的所有活动,并将其从最近的任务列表中删除。”

  isWeekend : () => boolean;

答案 2 :(得分:5)

finish()告诉android系统你已经完成了。由android系统决定何时实际杀死你的应用程序。只要操作系统不需要资源,它就会保留您的应用程序。对于操作系统,将应用程序保留在RAM中比重新启动应用程序要便宜。这种策略适用于大多数现代操作系统。

答案 3 :(得分:5)

  

如果杀死这个过程不是一个理想的选择,我该怎么办?

没什么,很可能。

  

我知道完成将完成活动,但为什么它仍然可以在任务管理器中看到?

首先,您的流程仍在运行。这是一项优化,因此,如果用户选择立即返回您的应用,或其他东西触发您的应用代码(例如AlarmManager),Android就不必浪费CPU和电池为您提供另一个流程远。 Android会在认为合适时终止您的流程。

请注意,根据您认为的“任务管理器”,您的应用可能会出现在那里,即使您的流程已终止。例如,长按HOME或按RECENTS按钮会显示“最近的任务”,其中包括已终止该过程的任务。

  

在应用程序任务管理器

中显示应用程序中的进度条并不是真正专业

我不知道为什么你会这么想。话虽如此,欢迎您override onCreateThumbnail() in your activities返回其他用于缩略图的内容。

答案 4 :(得分:1)

进程保持在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。当需要空间时,将终止这些过程。在此之前,它们可以快速恢复,并使操作系统更快。

您需要查找正在运行的进程的情况是:

  1. 管理不善逃避线程。你启动一个运行循环的线程,不知道它会永远结束,最后松散所有对它的引用。
  2. 执行不当,而且经常泄露服务。向系统管理员/服务注册服务,忘记取消注册
  3. 系统流程通过Runtime.exec()运行,忘记在其上调用destroy()
  4. 如果您只是处理简单的Android组件并正确实现了它们的生命周期。您永远不必担心内部流程。