“强制停止”按钮是什么意思?


26

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

这是什么意思?如果按下此按钮会怎样?

此按钮并不表示应用程序正在运行,因为带有此按钮的应用程序未在本Running节中列出。

我可以仅列出具有该Force stop按钮活动状态的应用程序并将其卸载吗?


Android版本:3.2

Answers:


18

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

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

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


1
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out,您可以举一个具有这种行为的示例应用程序吗?我只是浏览了一些应用程序,发现“强制停止”和“卸载”按钮均已激活。我使用的是Android 4.4.2。
cychoi 2014年

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

15

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

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

2

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

因此,尽管在运行的进程中可能看不到它,但它并没有完全消失。

通常,它应位于缓存的后台进程中。

此外,关于任务管理器。不建议使用它们,因为已对Android进行了硬编码以有效地管理应用程序。应用程序/任务杀手实际上会耗尽电池,因为杀手杀死应用程序后,根据android算法,它们将被启动再次!(并且应用程序在启动时会占用比理想状态更多的内存),因此它变成了一个循环并耗尽了电池。

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

在其他应用上,其显示为灰色!


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

-2

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

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

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

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


3
尽管基本信息正确,但最好删除有关“自动杀手”的部分。可能有一段时间需要使用它们(在Android 2.x之前),但是它们绝对适得其反,并且大多数情况下会对电池运行时间产生负面影响。
伊齐
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.