Как убить текущую задачу в android

Я пытаюсь создать приложение типа убийцы задачи в android. Я могу показать список текущей выполняемой задачи с помощью ActivityManager, но столкнулся с проблемой при убийстве задачи.

Вот что я делаю, чтобы получить список текущих задач:

ActivityManager am = (ActivityManager) context. getSystemService(Activity.ACTIVITY_SERVICE); List a=am.getRunningTasks(Integer.MAX_VALUE); PackageManager pack=this.getPackageManager(); for(int i=0;i<a.size();i++){ String packageName = a.get(i).topActivity.getPackageName(); Drawable d=null; String appName=""; try { d=pack.getApplicationIcon(packageName); appName=(String) pack.getApplicationLabel(pack.getApplicationInfo(packageName,PackageManager.GET_META_DATA)); } catch (NameNotFoundException e) { e.printStackTrace(); } packName.add(packageName); //arraylist of package name apps.add(appName); // arraylist of app name icons.add(d); //arraylist of icons } 

Это сработало для меня. Но теперь, когда я пытаюсь убить задачу с помощью killBackgroundProcesses:

 am.killBackgroundProcesses(package name); 

Это не работает . Также метод killBackgroundProcesses доступен в уровне API 2.2, то как я могу выполнить одну и ту же задачу на предыдущем уровне API, таком как 1.6 и т. Д.

Есть ли другой способ показать активные приложения и убить их.

Пожалуйста помоги .

Большое спасибо.

Никто не может убить процесс, кроме самой ОС Android.

Большинство убийц задач на рынке Android не убивают приложение, они просто перезапускают процесс

используя

 public void restartPackage (String packageName) 

когда этот метод вызывается вашей деятельностью, операционная система немедленно вызывала

savedInstanceState и сохранить состояние этой активности, которую вы хотите убить. Теперь этот процесс

удалены из памяти, и ОС сохранила его состояние. Теперь, когда в следующий раз пользователь начнет эту деятельность,

начнется с того места, где он был убит или, другими словами, перезапущен. Вы можете проверить его с любого

что они не убивают процесс, потому что никто не может этого сделать. Этот метод также

работать в ICS.

для вышеуказанного метода вы можете посмотреть здесь . Насколько я знаю killBackgroundProcesses (String packageName) для API 8 и выше.

В двух словах, автоматические убийцы задач работают, опросив ОС для списка текущих запущенных процессов и памяти, которую они потребляют. Затем либо с помощью интеллектуального алгоритма, либо с пользовательским вводом Task Killers вызывают вызов системе, сообщающей системе, чтобы убить процесс. Есть два примера, которые вы можете сделать.

Они есть

  • Process.sendSignal (pid, Process.SIGNAL_KILL);
  • ActivityManager.killBackgroundProcesses (Имя_пакет)

Это сначала работает, вызывая Process.killProcess (int pid), где pid – уникальный идентификатор для конкретного процесса. Android убивает процессы так же, как Linux; однако пользователь может только убивать процессы, которыми они владеют. В Android каждое приложение запускается с уникальным идентификатором пользователя, идентификатором пользователя. Поэтому, используя этот API, приложение может только убивать свои собственные процессы, поэтому в документах для Process.killProcess (int pid) указано следующее объяснение:

Убейте процесс с заданным PID. Обратите внимание, что хотя этот API позволяет нам запросить уничтожение любого процесса на основе его PID, kernel ​​по-прежнему будет устанавливать стандартные ограничения на которые PID, которые вы действительно можете убить. Обычно это означает только процесс, выполняющий пакеты / приложение вызывающего абонента, и любые дополнительные процессы, созданные этим приложением; пакеты, совместно использующие общий UID, также смогут убивать процессы друг друга.

Когда этот метод называется, сигналы генерируются ОС и устанавливаются в процесс. Всякий раз, когда процесс получает сигнал от ОС, он должен либо обрабатывать этот сигнал, либо сразу умирать. Сигналы, такие как SIG_KILL не могут быть обработаны и приводят к немедленной смерти процесса получателя. Если вы хотите убить процессы, у которых у вас нет прав на убийство, т. Е. Не ваш процесс, вы должны повысить свои привилегии с помощью sudo (для этого потребуются привилегии root на устройстве).

Второй API работает, сообщая ActivityManager что вы хотите убить процессы, связанные с определенным пакетом. Этот API обходит потребность в вашем UID, чтобы он соответствовал UID процесса, потому что он требует, чтобы пользователь принял разрешение KILL_BACKGROUND_PROCESSES. Это разрешение сигнализирует ОС, что приложение было одобрено пользователем как убийца задачи. Когда убийца задач хочет убить приложение, он сообщает ОС, чтобы он справлялся с проблемой только того, чтобы убивать процессы, которые у вас есть.

В Android Docs говорится, что этот API фактически использует первый API Process.killProcess

Система немедленно уничтожит все фоновые процессы, связанные с данным пакетом. Это то же самое, что и kernel, убивающее эти процессы для восстановления памяти; система позаботится о том, чтобы перезапустить эти процессы в будущем по мере необходимости.

Надеюсь, поможет.

Вы ввели в файл манифеста разрешение ниже?

   
  • ОШИБКА: «keytool» не распознается как внутренняя или внешняя команда, операционная программа или командный файл
  • Клиент Android REST, образец?
  • Как удалить дочерние узлы в firebase android?
  • «Невозможно разрешить символ R» в Android Studio
  • Установленное соединение было прервано программным обеспечением вашей главной машины
  • android studio 0.4.2: Ошибка синхронизации с ошибкой проекта Gradle
  • Виджеты не реагируют при повторном добавлении кода
  • Как я могу настроить Android-коммутатор?
  • Заставить камеру всегда открывать в портретном режиме в android
  • Как создать пользовательский диалог с закругленными углами в android
  • Android ListView с флажком и всеми интерактивными
  • Давайте будем гением компьютера.