Android-убийца процесса

Может быть, вы можете помочь.

Можно ли получить список всех Processes , запущенных в системе Android, и убить некоторых из них? Я знаю, что есть некоторые приложения ( task managers ), но я бы хотел написать собственное, простое приложение.

Я хотел бы написать простой диспетчер задач, список всех процессов и кнопку, которая убьет некоторые из них.

Не могли бы вы просто написать некоторые Java-методы, которые я могу вызвать, чтобы получить список процессов и метод их уничтожения. Или просто дайте мне несколько советов.

Убийство приложений / сервисов на Android – это, как правило, очень плохая идея . Несмотря на то, что можно писать приложения- task killer , его не следует поощрять ни к чему, кроме разработки / отладки.

Управление задачами является обязанностью Android O / S, задачи, которые вы видите, – это не процессы (в смысле процессов, которые вы видите в диспетчере задач Windows, например), на самом деле у них есть только процесс, когда Android сообщает им Они могут иметь один.

Приложения регулярно нарушаются этими инструментами управления задачами, поскольку они часто не могут восстановиться после принудительного завершения, особенно если они были заняты записью в файл или использованием другого ресурса, когда они были убиты. Он также помещает пользователей мобильных устройств в ложное ожидание, что перечисленные приложения фактически являются RUNNING на их телефоне, которых они часто нет. Это объясняется в [ActivityManager docs] [1]:

Информация, которую вы можете получить о конкретной задаче, которая в настоящее время «работает» в системе. Обратите внимание, что выполняемая задача не означает, что данная задача имеет активный процесс; Это просто означает, что пользователь пошел к нему и никогда не закрывал его, но в настоящее время система, возможно, убила его процесс и только удерживает его до последнего состояния, чтобы перезапустить его, когда пользователь возвращается.

Когда вы видите список running приложений в таких приложениях, как TaskKiller или Quick System Info, многие из них фактически не работают, они просто находятся в состоянии приостановления. Эти приложения не потребляют системные ресурсы, потому что Android решил остановить их, пока они не понадобятся. Однако, когда вы их убиваете, вы не даете им времени, чтобы закрыть их, и когда вы попытаетесь запустить их в следующий раз, вам может быть предоставлен диалог с недружественным силовым закрытием. Я видел, как приложения полностью отключались, даже если переустановка была неэффективной, потому что они пытаются прочитать поврежденный файл на SD-карте или используют неофициальные вызовы API.

Короче говоря, друзья не позволяют друзьям использовать убийцы задач в Android.

В любом случае, чтобы ответить на ваш вопрос, ActivityManager – это то, что большинство этих приложений используют для перечисления действий, которые находятся в запущенном / приостановленном состоянии.

Freetaskmanager – пример использования одного из этих task managers .

  // Get currently running application processes List<ActivityManager.RunningAppProcessInfo> list = servMng.getRunningAppProcesses(); if(list != null){ for(int i=0;i<list.size();++i){ if("com.android.email".matches(list.get(i).processName)){ int pid = android.os.Process.getUidForName("com.android.email"); android.os.Process.killProcess(pid); }else{ mTextVIew.append(list.get(i).processName + "\n"); } } } /* // Get currently running service List<ActivityManager.RunningServiceInfo> list = servMng.getRunningServices(1024); if(list != null){ for(int i=0;i<list.size();++i){ mTextVIew.append(list.get(i).service.getClassName() + "\n"); } } */ /* // Get currently running tasks List<ActivityManager.RunningTaskInfo> list = servMng.getRunningTasks(1024); if(list != null){ for(int i=0;i<list.size();++i){ mTextVIew.append(list.get(i).toString() + "\n"); } } */ 

Выход из приложения Android через Java, по меньшей мере, сложнее. Убив приложение через интерфейс объекта процесса, как правило, считается плохой формой по всем причинам, перечисленным выше, я не буду их перефразировать, но я не чувствую, что опубликованные разочарования предназначены для того, чтобы вы не делали все вместе, они просто заставляют вас Осознавая возможные оговорки. Вот улов, Android должен отслеживать действия и load/run order потому что у устройств есть кнопка back … так что вы добросовестно называете finish() или finishFromChild(childActivity) и когда пользователь exits из приложения, происходит предыдущее действие Из вашего приложения, счастливо игнорируя ваш код, который попросил его выйти.

Иногда вам просто нужно убить приложение. Итак … прежде чем совершить этот цифровой процесс, вы должны сделать небольшое планирование. Убедитесь, что пользователь не будет убивать любые файлы ввода / вывода или сетевую связь, жизненно важные для вашего приложения. Моя стратегия для этого заключалась в том, чтобы front load мои действия, чтобы выполнить весь тяжелый подъем на или около событий загрузки.

Кроме того, я всегда вызываю пользователя перед тем, как они выходят, – это интерфейс пользовательского интерфейса настольного приложения, который хорошо переводится здесь.

Вышеупомянутый код пропускает отметку, вызывая «getUidForName» …

В этом примере отображается событие back button Основы Android back button «Назад» и запрашивает пользователя «действительно ли вы хотите оставить мое приложение», и если пользователь выбирает «да», он убивает приложение.

  @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //Handle the back button if(keyCode == KeyEvent.KEYCODE_BACK) { //Ask the user if they want to quit new AlertDialog.Builder(this) .setIcon(android.R.drawable.exclamationpoint) .setTitle("Exit?") .setMessage("You are about to exit the Application. " + "Do you really want to exit?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Stop the activity //maintenancetabs.this.finish(); int pid = android.os.Process.myPid(); android.os.Process.killProcess(pid); } }) .setNegativeButton("No", null) .show(); return true; } else { return super.onKeyDown(keyCode, event); } } 
Intereting Posts