Код позаду 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.