El derrière le Arrêt forcé bouton est complexe et non documentée. Je vais le reproduire mot à mot, puis le parcourir pièce par pièce.
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);
}
}
Le premier if
vérifie si une ligne composant du paquet est un administrateur du dispositif (c'est-à-dire, s'il est coché dans la section Administrateurs de dispositifs dans la liste des Sécurité page de la Paramètres app). Si c'est le cas, le bouton est désactivé (en grisé) pour que vous ne puissiez pas arrêter les administrateurs de périphériques.
Ensuite, le else if
vérifie si le paquet est déjà arrêté . Ici, "arrêté" ne signifie pas seulement "ne fonctionne pas". D'après ce que je sais, un paquet est dans la section arrêté si vous n'avez jamais exécuté de composant à partir de celui-ci (par exemple en le lançant à partir du menu), ou si vous avez appuyé sur une touche Arrêt forcé (celui-ci ou dans une boîte de dialogue "stopped working") et ne plus exécuter aucun de ses composants. Si le paquet n'a pas a été arrêté, le bouton est activé .
El else
Le cas couvre l'éventualité rare qu'une application a a été arrêté et n'est pas un administrateur de dispositif. Dans ce cas, il donne d'autres services du système une chance d'activer le bouton. Par exemple, l'application peut avoir une alarme réglée et en attente, ce qui entraînerait ultérieurement le redémarrage de l'application, même à partir de l'état arrêté. Dans ce cas, le bouton sera activé. Si aucun autre service système n'a de raison d'activer le bouton, celui-ci sera désactivé.
Résumé
El Arrêt forcé Le bouton est activé si le paquet n'est pas un administrateur de périphérique. y soit vous n'avez pas encore arrêté de force cette application, soit vous l'avez arrêtée de force mais un service système pense qu'il va la relancer.
Si l'application est en cours d'exécution (et qu'il ne s'agit pas d'un dispositif d'administration), la fonction Arrêt forcé sera certainement activé, mais le fait que le bouton soit activé ne signifie pas que l'application fonctionne.