7

finish()如果满足某个条件,我会打电话。但是,即使finish()我按住主页按钮,我仍然可以在那里看到我的应用程序。如果终止进程不是一个理想的选择,我该怎么办?

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

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

    };

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

4

5 回答 5

10

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

if(android.os.Build.VERSION.SDK_INT >= 21)
{
    finishAndRemoveTask();
}
else
{
    finish();
}
于 2016-05-22T15:32:15.113 回答
9

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

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

于 2013-06-06T16:35:46.717 回答
5

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

于 2013-06-06T16:34:30.553 回答
5

如果终止进程不是一个理想的选择,我该怎么办?

没什么,很可能。

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

首先,您的进程仍在运行。这是一种优化,因此如果用户选择立即返回您的应用程序,或者其他原因触发您的应用程序代码(例如,AlarmManager),Android 不必立即为您分叉另一个进程而浪费 CPU 和电池。Android 将在认为合适时终止您的进程。

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

在应用程序任务管理器中显示应用程序内的进度条就像不是很专业

我不知道你为什么会这样想。话虽如此,欢迎您在活动中覆盖onCreateThumbnail()以返回其他内容以用于缩略图。

于 2013-06-06T16:37:39.457 回答
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()它们。

如果您只是在处理简单的 Android 组件并且已经正确实现了它们的生命周期。您永远不需要担心内部流程。

于 2013-06-06T16:57:36.937 回答