Код позаду Force стоп кнопка є складним і без документів. Я відтворять його дослівно, а потім проходжу його по одній деталі.
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Справа охоплює рідкісні випадки , які додаток вже було зупинено і не є адміністратором пристрою. У цьому випадку це дає можливість іншим системним службам включити кнопку. Наприклад, у програмі може бути встановлений тривожний сигнал, який пізніше призведе до запуску програми, навіть із зупиненого стану. У цьому випадку кнопка буде включена. Якщо жодна інша системна служба не має підстав увімкнути кнопку, вона буде відключена.
Підсумок
Force стоп кнопка включена , якщо пакет не є адміністратором пристрою і або ви ще не примусово-зупинили цей додаток або у вас є сила, зупинили його , але система обслуговування думає , що це буде працювати знову.
Якщо програма запущена (і це не адміністратор пристрою), кнопка Примусово зупинити , безумовно, буде увімкнено, але кнопка "Увімкнено" не означає, що програма працює.
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out, чи можете ви навести приклад програми, яка має таку поведінку? Я просто проглянув деякі мої програми та виявив, що активовані кнопки "Припинити" та "Видалити". Я на Android 4.4.2.