歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android實現任務管理器

Android實現任務管理器

日期:2017/3/1 11:08:38   编辑:Linux編程

任務管理器可以實現的功能有:

1.查看當前系統下運行的所有的進程

2.可以查看每個進程的進程號、版本號以及內存占用情況

3.殺死進程(可以殺死全部進程或者殺死指定的進程)

4.查看系統剩余內存

效果圖: 殺死全部進程

實現思路:

ActivityManager類可以獲取到當前系統的所有進程,以及每個進程的信息,也可以殺死某個進程,

ActivityManager.getRunningAppProcesses(); 獲取系統的所有進程

ActivityManager.getProcessMemoryInfo(pids); 根據進程號獲取每個進程的內存占用情況

ActivityManager.restartPackage(processName) ; 根據進程的包名殺死某個進程


PackageManager可以根據包名獲取程序的圖標、版本號、名字、權限、簽名


核心代碼:

  1. /*
  2. * 獲取所有進程及用戶 的進程
  3. */
  4. protected void initData() {
  5. runningAppProcessInfos =ActivityManager.getRunningAppProcesses(); //獲取所有的進程
  6. userRunningAppProcessInfos = new ArrayList<ActivityManager.RunningAppProcessInfo>();//獲取用戶的進程
  7. for(int i = 0; i< runningAppProcessInfos.size();i++){
  8. if("system".equals(runningAppProcessInfos.get(i).processName)
  9. ||"Android.process.media".equals(runningAppProcessInfos.get(i).processName)
  10. ||"android.process.acore".equals(runningAppProcessInfos.get(i).processName)
  11. ){
  12. continue;
  13. }
  14. userRunningAppProcessInfos.add(runningAppProcessInfos.get(i));
  15. }
  16. }

注:殺死全部進程實際上殺死的是用戶的所有進程,系統進程是無法殺死的,所以這裡要獲取到用戶的所有的進程。

  1. /*
  2. * 獲取某個進程占用的內存信息
  3. */
  4. ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
  5. int[] pids = {userRunningAppProcessInfos.get(position).pid};
  6. android.os.Debug.MemoryInfo[] memoryInfos = am.getProcessMemoryInfo(pids);
  7. int memorysize = memoryInfos[0].getTotalPrivateDirty();
  8. tv_app_memory.setText("內存占用為 "+ memorysize +" KB");
  1. public class TaskInfo {
  2. Context context ;
  3. PackageManager pm ;
  4. public TaskInfo(Context context) {
  5. this.context = context;
  6. pm = context.getPackageManager();
  7. }
  8. /*
  9. * 根據包名 查詢 圖標
  10. */
  11. public Drawable getAppIcon(String packname){
  12. try {
  13. ApplicationInfo info = pm.getApplicationInfo(packname, 0);
  14. return info.loadIcon(pm);
  15. } catch (NameNotFoundException e) {
  16. // TODO Auto-generated catch block
  17. e.printStackTrace();
  18. return null;
  19. }
  20. }
  21. /*
  22. *獲取程序的版本號
  23. */
  24. public String getAppVersion(String packname){
  25. try {
  26. PackageInfo packinfo = pm.getPackageInfo(packname, 0);
  27. return packinfo.versionName;
  28. } catch (NameNotFoundException e) {
  29. e.printStackTrace();
  30. return null;
  31. }
  32. }
  33. /*
  34. * 獲取程序的名字
  35. */
  36. public String getAppName(String packname){
  37. try {
  38. ApplicationInfo info = pm.getApplicationInfo(packname, 0);
  39. return info.loadLabel(pm).toString();
  40. } catch (NameNotFoundException e) {
  41. // TODO Auto-generated catch block
  42. e.printStackTrace();
  43. return null;
  44. }
  45. }
  46. /*
  47. * 獲取程序的權限
  48. */
  49. public String[] getAppPremission(String packname){
  50. try {
  51. PackageInfo packinfo = pm.getPackageInfo(packname, PackageManager.GET_PERMISSIONS);
  52. //獲取到所有的權限
  53. return packinfo.requestedPermissions;
  54. } catch (NameNotFoundException e) {
  55. e.printStackTrace();
  56. return null;
  57. }
  58. }
  59. /*
  60. * 獲取程序的簽名
  61. */
  62. public String getAppSignature(String packname){
  63. try {
  64. PackageInfo packinfo = pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);
  65. //獲取到所有的權限
  66. return packinfo.signatures[0].toCharsString();
  67. } catch (NameNotFoundException e) {
  68. e.printStackTrace();
  69. return null;
  70. }
  71. }
  72. }
Copyright © Linux教程網 All Rights Reserved