Как технически работает зависание приложения?

22

Такие приложения, как Link2SD и Titanium Backup, могут «заморозить» другие приложения, то есть отключить их, не удаляя их. Что эти приложения делают для достижения этой цели?

Erik
источник

Ответы:

28

Titanium Backup и т. Д. Просто используйте встроенный, Package Manager (pm)чтобы заморозить приложение. pmимеет функцию предотвращения запуска приложений и их появления в Launcher. Чтобы использовать его, Titanium Backup и т. Д. Выполните следующую команду:

вечера отключить {имя_пакета}

Вы можете заморозить приложения самостоятельно, не используя специальное морозильное приложение. Просто используйте приведенную выше команду в Terminal Emulator или ADB Shell.

Например, если вы хотите заморозить Stock Web Browser, откройте Terminal Emulatorи переключитесь на root с помощью suкоманды. Затем выполните # pm disable com.android.browser.
Это вернется #Package com.android.browser new state: disabled. Выполнено!
Перезагрузите Launcher (для некоторых устройств может потребоваться перезагрузка), чтобы значок приложения исчез.

Для размораживания приложения, просто замените disableс enableв команде.

Android Quesito
источник
Это то же самое, что команды kill -STOP, kill -CONT, описанные здесь? linuxpoison.blogspot.com/2007/11/…
NoBugs
@NoBugs Перезагрузите ваше устройство. Некоторым устройствам это необходимо для полного отключения приложения. И да, это не команда убить.
Android Quesito
Правильно. Иногда pm disableтолько говорит «убит», тогда процесс запускается снова немедленно. убить -STOP пид лучше. Вы можете увидеть, какие из них остановлены, на psвыходе.
NoBugs
13

Я нашел, как pm disableработает:

Если вы запускаете cat /system/bin/pm, это дает:

# Script to start "pm" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/pm.jar
exec app_process $base/bin com.android.commands.pm.Pm "$@"

Очевидно, что он такой же, как PackageManager, который мы используем из Java, он вызывает его - просто в корневом контексте, к которому ни одно пользовательское приложение не может получить прямой доступ.

Вы можете проверить, если что-то заморожено, используя

getPackageManager().getApplicationEnabledSetting( the package name ) ==
        getPackageManager().COMPONENT_ENABLED_STATE_DISABLED)
NoBugs
источник
-4

В системах Unix файлы имеют 3 авторизации: чтение, запись и выполнение.

(Для 3 категорий людей: владелец файла [обычно его создатель], группа людей и все остальные, но это вне темы).

Если вы удалите авторизацию на выполнение файла, он больше не может быть запущен (выполнен).

dralpuop
источник
Привет, Дралпуоп. Приложения Android не являются двоичными файлами, поэтому добавление или удаление разрешений для исполняемых файлов не влияет на их выполнение.
Повелитель огня
Android - это System 5 Unix, где (например) сценарии оболочки не являются бинарными, но при этом добавление или удаление исполняемого разрешения делает разницу.
Dralpuop
Сценарий оболочки может быть выполнен без установленного исполняемого бита, передав его в качестве аргумента интерпретатору напрямую, так что это не имеет значения для сценариев оболочки или для приложений. Кстати, вопрос касается приложений для Android, а не сценариев оболочки.
Повелитель огня
1
Попробуйте этот источник, чтобы узнать, как приложения запускаются в Android. github.com/dogriffiths/HeadFirstAndroid/wiki/…
Повелитель огня