Что означает кнопка «Force stop»?

26

Когда я иду в, Settings > Applications > Manage Applications > Downloadedя вижу список приложений. Если я выбираю несколько приложений, я вижу активную кнопку «Force stop», но в некоторых приложениях эта кнопка недоступна.

Что это означает? Что произойдет, если я нажму эту кнопку?

Эта кнопка не может означать, что приложение запущено, поскольку приложения с этой кнопкой не указаны в Runningразделе.

Могу ли я перечислить только приложения с Force stopактивной кнопкой и удалить их?


Версия Android: 3.2

Сьюзан Чок
источник

Ответы:

18

Как сказано в моем комментарии к ответу paco, информация, которую он предоставил, в основном верна: большинство приложений не завершают работу полностью, если вы их оставляете, и ни одно приложение не должно закрываться, если вы покидаете его с помощью кнопки «Домой». Кроме того, в некоторых приложениях работают фоновые службы, которые пользователь не может закрыть.

Теперь в некоторых ситуациях вам нужно остановить приложение (включая его фоновые службы) - например, если вы хотите удалить это приложение (или, в случае системного приложения, его обновления). Вы заметите это, когда кнопка «Force Stop» активна, кнопка «Удалить» (или «Удалить») будет выделена серым цветом, но последняя активируется, когда вы остановили приложение с помощью «Force Stop». (Если обе кнопки выделены серым цветом, вы можете сказать, что это системное приложение, которое вы не можете удалить).

Кстати: если кнопка «Force Stop» выделена серым цветом (как вы пометили ее «затемненной»), это означает, что приложение в данный момент не запущено и не запущено ни одной службы (в данный момент).

Иззи
источник
1
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed outМожете ли вы привести пример приложения, которое имеет такое поведение? Я просто просмотрел некоторые из своих приложений и обнаружил, что активированы кнопки «Force Stop» и «Uninstall». Я на Android 4.4.2.
cychoi
1
Поскольку моему ответу уже 2 года, Киткат тогда не был доступен; это поведение могло измениться или не повлиять на все приложения. Я не могу проверить с Kitkat (ни одно устройство, на котором это работает), и я не помню, с какими пакетами я это видел, извините.
Иззи
15

Код позади 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 стоп кнопка включена , если пакет не является администратором устройства и либо вы еще не принудительно-остановили это приложение или у вас есть сила, остановили его , но система обслуживания думает , что это будет работать снова.

Если приложение работает (и это не администратор устройства), кнопка принудительной остановки обязательно будет включена, но эта кнопка не означает, что приложение запущено.

Дэн Халм
источник
Здорово, что вы показываете нам код, который определяет, отображается кнопка или нет. Для разработчика, как я, это идеальный ответ. Но на самом деле это только половина ответа. Вы не показываете, что происходит, когда вы действительно нажимаете кнопку.
Джон Панкович
2

Android поддерживает 4 типа приложений в своей памяти. Я не помню, чтобы все, кроме работающего и кэшированного фона, - это два из них ... (доступ к кэшированному фону можно получить, нажав кнопку аппаратного меню на вкладке « Запуск » и выбрав всплывающую опцию)

Таким образом, хотя это не может быть видно в запущенных процессах, оно не совсем мертвое.

В основном это должно быть в кэшированных фоновых процессах.

Кроме того, о менеджерах задач. Не рекомендуется использовать их, так как Android жестко запрограммирован для эффективного управления приложениями. Фактически, приложение-убийцы приложений скорее разряжают батарею, так как после того, как программа-убийца убивает приложения, согласно алгоритму Android, они будут запущены. снова! (и приложения занимают больше памяти при запуске, чем в идеальном состоянии), таким образом, это становится циклом и разряжает батарею.

поэтому кнопка принудительного закрытия активна в основном на запущенных и кэшированных процессах и может существовать в очень немногих приложениях, которые находятся в двух других типах процессов!

в других приложениях его серый!

Nirmik
источник
1
Это более 4 типов ( более подробное описание см. В разделе Общие сведения о приложениях и жизненных циклах приложений Android ). Но эти классы не имеют ничего общего с кнопкой «принудительной остановки», по крайней мере, не напрямую (см. Мой ответ : активная кнопка «принудительной остановки» просто означает, что либо само приложение, либо одна из его зарегистрированных служб в данный момент работают).
Иззи
-2

Эта кнопка активна для приложений, которые работают или работают с момента последнего запуска вашего устройства.

Android не убивает приложения полностью, когда вы выходите из него, эта кнопка полностью закрывает приложение и удаляет его из стека (запущенные приложения), также эта кнопка освобождает память, используемую приложением.

Невозможно отобразить список запущенных приложений, эта кнопка также доступна для приложений, работающих в фоновом режиме.

В Play Store есть бесплатные приложения-убийцы для автоматического управления памятью вашего устройства.

pacoespinoza
источник
3
Пока основная информация верна: лучше уберите часть про «автоматических убийц». Возможно, было некоторое время, когда они были необходимы (до Android 2.x), но они абсолютно непродуктивны и в основном отрицательно влияют на время работы батареи.
Иззи