当我转到Settings > Applications > Manage Applications > Downloaded时,我看到一个应用程序列表。如果选择某些应用程序,我会看到“强制停止”按钮处于活动状态,但是某些应用程序使该按钮变暗。

是什么意思?如果我按下此按钮会发生什么?

此按钮并不意味着应用程序正在运行,因为带有此按钮的应用程序未在Running部分中列出。

我可以列出一下吗?启用了Force stop按钮的应用程序并将其卸载?


Android版本:3.2

#1 楼

正如我在对paco的回答所作的评论中所说,他提供的信息基本上是正确的:大多数应用程序如果离开它们不会完全退出,并且如果您通过“主页”按钮离开它,则任何应用程序都不应退出。此外,某些应用程序正在运行后台服务,否则用户将无法退出。

现在在某些情况下,您需要停止某个应用程序(包括其后台服务),例如如果您要卸载该应用程序(如果是系统应用程序,则要更新)。当“强制停止”按钮处于活动状态时,您会注意到这一点,“卸载”(或“删除”)按钮显示为灰色-但是当您通过“强制停止”停止应用程序时,后者会被激活。 (如果两个按钮都变灰,那么您可以说这是一个系统应用程序-无法卸载)。

顺便说一句:如果“ Force Stop”按钮变灰(“灰暗” “正如您所说的那样”,表示该应用当前未运行,或者该时刻没有任何服务在运行。

评论


当“强制停止”按钮处于活动状态,“卸载”(或“删除”)按钮显示为灰色时,您会注意到这一点,您能举一个具有这种行为的示例应用程序吗?我只是浏览了一些应用程序,发现“强制停止”和“卸载”按钮均已激活。我使用的是Android 4.4.2。

– cychoi
2014年12月1日上午11:19

由于我的答案已经2岁了,因此Kitkat当时无法使用。此行为可能已更改或未影响所有应用程序。我无法使用Kitkat(没有运行该设备的设备)进行测试,而且我很不高兴不知道我看到过哪些软件包,抱歉。

– Izzy♦
2014年12月1日上午11:32

#2 楼

强制停止按钮后面的代码很复杂,没有文档说明。我将逐字复制它,然后一次遍历它。

private void checkForceStop() {
    if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
        // User can't force stop device admin.
        updateForceStopButton(false);
    } else if ((mAppEntry.info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
        // If the app isn't explicitly stopped, then always show the
        // force stop button.
        updateForceStopButton(true);
    } else {
        Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
                Uri.fromParts("package", mAppEntry.info.packageName, null));
        intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName });
        intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
        intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid));
        getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null,
                Activity.RESULT_CANCELED, null, null);
    }
}


第一行if检查软件包的任何组件是否是设备管理员(也就是说,如果已在“设置”应用的“安全性”页面的“设备管理员”列表中选中了它)。如果是这样,则该按钮被禁用(变灰),因此您无法停止设备管理员。

然后,else if检查软件包是否已停止。在这里,停止不仅意味着“未运行”。据我所知,如果您从未从中运行任何组件(例如通过从菜单启动它),或者如果您按下了“强制停止”按钮(此按钮或(“停止工作”对话框),并且不再运行其任何组件。如果程序包尚未停止,则启用该按钮。

else案例涵盖了一种罕见的情况,即应用程序已停止且不是设备管理员。在这种情况下,它使其他系统服务有机会启用该按钮。例如,该应用程序可能设置了警报并处于挂起状态,这稍后会导致该应用程序甚至从停止状态再次启动。在这种情况下,该按钮将被启用。如果没有其他系统服务有理由启用该按钮,则它将被禁用。

摘要

如果程序包不是设备管理员,则启用“强制停止”按钮,并且

如果应用程序正在运行(并且它不是设备),则可能是您尚未强制停止该应用程序,或者是已强制停止该应用程序,但系统服务认为它会再次运行它。管理员),肯定会启用“强制停止”按钮,但是启用该按钮并不意味着该应用程序正在运行。

评论


很高兴您向我们展示确定是否显示按钮的代码。对于像我这样的开发人员来说,这是完美的答案。但实际上,这只是答案的一半。您没有显示实际按下按钮时会发生什么。

– John Pankowicz
19-2-25在14:08



#3 楼

Android在其内存中维护4种类型的应用程序。我不记得所有内容,但正在运行和缓存的背景只有其中两个...(可以通过在运行选项卡中单击硬件菜单按钮并选择弹出选项来访问缓存的背景)

它可能不会在正在运行的进程中看到,它并没有完全消失。

大多数情况下,它应该在缓存的后台过程中。

关于任务管理器。它不建议您使用它们,因为android已经过硬编码,可以有效地管理应用程序。应用程序/任务杀手实际上宁愿消耗电量,因为杀手杀死应用程序后,根据android算法,它们将再次启动!

,因此强制关闭按钮在大多数正在运行和缓存的进程中处于活动状态,并且可能存在于驻留的极少数应用程序中在其他两种类型的进程中!

在其他应用程序中变灰了!

评论


它有4种以上的类型(有关详细说明,请参见了解Android应用程序和活动生命周期)。但是这些类与“强制停止”按钮无关,至少没有直接关系(请参阅我的回答:激活的“强制停止”按钮仅表示应用程序本身或其注册服务之一正在运行)。

– Izzy♦
2012年11月21日上午10:51

#4 楼

此按钮对于自上次启动设备以来正在运行或正在运行的应用程序处于活动状态。

当您退出设备时,Android不会完全杀死应用程序,此按钮可完全关闭该应用程序并将其从堆栈中删除(正在运行的应用程序),此按钮还释放了该应用程序使用的内存。

无法列出正在运行的应用程序,在后台运行的应用程序也具有此功能按钮。

Play商店中有免费的杀手级应用,可以自动管理设备的内存。

评论


尽管基本信息正确,但最好删除有关“自动杀手”的部分。可能有一段时间需要使用它们(在Android 2.x之前),但是它们绝对适得其反,并且大多数情况下会对电池运行时间产生负面影响。

– Izzy♦
2012年11月20日21:40