finish()
如果满足某个条件,我会打电话。但是,即使finish()
我按住主页按钮,我仍然可以在那里看到我的应用程序。如果终止进程不是一个理想的选择,我该怎么办?
这是我打电话的地方finish()
:
protected void onStart() {
.............
if(today.equals("..."))
finish();
};
我知道完成将完成活动,但为什么它仍然在任务管理器中可见?我已经完成了。
finish()
如果满足某个条件,我会打电话。但是,即使finish()
我按住主页按钮,我仍然可以在那里看到我的应用程序。如果终止进程不是一个理想的选择,我该怎么办?
这是我打电话的地方finish()
:
protected void onStart() {
.............
if(today.equals("..."))
finish();
};
我知道完成将完成活动,但为什么它仍然在任务管理器中可见?我已经完成了。
finishAndRemoveTask()是根据文档“完成此任务中的所有活动并将其从最近的任务列表中删除”的新 API。
if(android.os.Build.VERSION.SDK_INT >= 21)
{
finishAndRemoveTask();
}
else
{
finish();
}
按住(并按住)HOME 按钮不会打开任务管理器。这是某种“最近的应用程序”部分,显示您最近打开的应用程序。实际上它比这更聪明一些 - 它可以恢复上次访问的活动,但由于你只有一个活动,这对你来说应该不是很重要
所以基本上即使你可以在这个列表中看到你的应用程序,这并不意味着它实际上正在运行。
finish() 告诉 android 系统你已经完成了。由 android 系统决定何时实际终止您的应用程序。只要操作系统不需要资源,它就会保留您的应用程序。对于操作系统,将应用程序保存在 RAM 中比重新启动应用程序更便宜。这种策略适用于大多数现代操作系统。
如果终止进程不是一个理想的选择,我该怎么办?
没什么,很可能。
我知道完成将完成活动,但为什么它仍然在任务管理器中可见?
首先,您的进程仍在运行。这是一种优化,因此如果用户选择立即返回您的应用程序,或者其他原因触发您的应用程序代码(例如,AlarmManager
),Android 不必立即为您分叉另一个进程而浪费 CPU 和电池。Android 将在认为合适时终止您的进程。
请注意,根据您认为的“任务管理器”是什么,您的应用程序可能会出现在那里,即使您的进程已终止。例如,长按HOME或按RECENTS按钮会调出“最近的任务”,其中包括已终止进程的任务。
在应用程序任务管理器中显示应用程序内的进度条就像不是很专业
我不知道你为什么会这样想。话虽如此,欢迎您在活动中覆盖onCreateThumbnail()
以返回其他内容以用于缩略图。
进程保持在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 组件并且已经正确实现了它们的生命周期。您永远不需要担心内部流程。