歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android結束系統中其他進程

Android結束系統中其他進程

日期:2017/3/1 11:14:54   编辑:Linux編程

雖然Google贊成應用程序不完全退出這一理論,認為Android完全有能力在內存不足的情況下自動釋放一些內存,但是廣大的用戶並不能完全支持這種理論,於是便誕生了任務管理器,用來結束進程。

這裡寫一下我的結束進程的方式,可能還有缺陷~

  1. int start = 0,end = 0;
  2. ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
  3. List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
  4. if(runningAppProcesses != null){
  5. start = runningAppProcesses.size();
  6. }
  7. for(ActivityManager.RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses){
  8. activityManager.restartPackage(runningAppProcessInfo.processName);
  9. }
  10. runningAppProcesses = activityManager.getRunningAppProcesses();
  11. if(runningAppProcesses != null){
  12. end = runningAppProcesses.size();
  13. }
  14. Toast.makeText(context, "成功結束了"+(start-end)+"個程序", Toast.LENGTH_SHORT).show();

很簡單,先獲取到runningAppProcesses,然後用restartPackage方法關閉。

這裡注意的地方有兩點:

1.為了兼容更多版本的Android系統,需要使用restartPackage方法,不要使用2.2的KILL_BACKGROUND_PROCESSES方法,因為之前的版本並沒有這個方法,在2.2以後的killBackgroundProcess方法也僅僅是對restartPackage的封裝,以前有人說過2.2中要用這個方法才能結束進程,其實是一樣的。

2.即使使用的是restartPackage方法,也要在聲明中加上android.permission.KILL_BACKGROUND_PROCESSES權限,也就是同時加上

  1. <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
  2. <uses-permission android:name="android.permission.RESTART_PACKAGES" />

這兩條權限,因為在2.2中會自動調用killBackgroundProcess方法,需要權限。

這裡有個問題,獲取的getRunningAppProcesses獲取的process,並不是每個單獨運行中程序的包名,沒有找到如何使用processName獲取到包名的方法(一個程序可以有多個進程,一個進程中可以運行多個程序),看了一下processName的結構,如com.naivesoft.test之類的,也有com.naivesoft.test:remote的,應該可以通過字符解析來獲取包名,不太清楚這個方法是不是最好的,但是現在直接用restartPackage來結束processName也是可以的,所以暫時先這麼做了。

Copyright © Linux教程網 All Rights Reserved