杀死进程.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package com.itant.processkiller;
  2. import java.io.DataOutputStream;
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import android.app.Activity;
  7. import android.app.ActivityManager;
  8. import android.content.pm.ApplicationInfo;
  9. import android.content.pm.PackageManager;
  10. import android.os.AsyncTask;
  11. import android.os.Bundle;
  12. public class MainActivity extends Activity {
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. new KillTask().execute();
  18. }
  19. private class KillTask extends AsyncTask<Void, Void, Void> {
  20. @Override
  21. protected Void doInBackground(Void... params) {
  22. // TODO Auto-generated method stub
  23. int thisPid = android.os.Process.myPid();
  24. Process process = null;
  25. try {
  26. process = Runtime.getRuntime().exec("su");
  27. DataOutputStream os = new DataOutputStream(process.getOutputStream());
  28. // 获取后台进程
  29. ActivityManager mActivityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
  30. List<ActivityManager.RunningAppProcessInfo> mRunningProcess = mActivityManager.getRunningAppProcesses();
  31. // 获取已安装的非系统应用的UID
  32. List<Integer> apkUIDs = new ArrayList<>();
  33. List<ApplicationInfo> applicationInfos = getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA);
  34. for (ApplicationInfo applicationInfo : applicationInfos) {
  35. if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
  36. // 非系统应用
  37. apkUIDs.add(applicationInfo.uid);
  38. }
  39. }
  40. // 后台进程的进程名包含有非系统应用的包名则可以杀掉
  41. for (ActivityManager.RunningAppProcessInfo processInfo : mRunningProcess) {
  42. if (processInfo.pid != thisPid) {
  43. // 不是本应用
  44. for (Integer uid : apkUIDs) {
  45. // 属于非系统应用
  46. if (processInfo.uid == uid) {
  47. os.writeBytes("kill -9 " + processInfo.pid + "\n");
  48. os.flush();
  49. break;
  50. }
  51. }
  52. }
  53. }
  54. os.writeBytes( "exit\n");
  55. os.flush();
  56. os.close();
  57. } catch (Exception e) {
  58. e.printStackTrace();
  59. } finally {
  60. if (process != null) {
  61. try {
  62. process.getInputStream().close();
  63. process.getOutputStream().close();
  64. process.destroy();
  65. process = null;
  66. } catch (IOException e) {
  67. // TODO Auto-generated catch block
  68. e.printStackTrace();
  69. }
  70. }
  71. }
  72. return null;
  73. }
  74. }
  75. }