Android实现任务管理器

任务管理器可以实现的功能有:

1.查看当前系统下运行的所有的进程

2.可以查看每个进程的进程号、版本号以及内存占用情况

3.杀死进程(可以杀死全部进程或者杀死指定的进程)

4.查看系统剩余内存


效果图:                                                                                               杀死全部进程

     

实现思路:

ActivityManager类可以获取到当前系统的所有进程,以及每个进程的信息,也可以杀死某个进程,

ActivityManager.getRunningAppProcesses();   获取系统的所有进程

ActivityManager.getProcessMemoryInfo(pids);  根据进程号获取每个进程的内存占用情况

ActivityManager.restartPackage(processName) ;  根据进程的包名杀死某个进程


PackageManager可以根据包名获取程序的图标、版本号、名字、权限、签名


核心代码:

[java]  view plain copy
  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. }  

注:杀死全部进程实际上杀死的是用户的所有进程,系统进程是无法杀死的,所以这里要获取到用户的所有的进程。


[java]  view plain copy
  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");  


[java]  view plain copy
  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.      */  
  25.     public String getAppVersion(String packname){  
  26.           
  27.           try {  
  28.               PackageInfo packinfo =    pm.getPackageInfo(packname, 0);  
  29.               return packinfo.versionName;  
  30.             } catch (NameNotFoundException e) {  
  31.                 e.printStackTrace();  
  32.                 return null;  
  33.             }  
  34.     }  
  35.       
  36.   
  37.     /* 
  38.      * 获取程序的名字  
  39.      */  
  40.     public String getAppName(String packname){  
  41.           try {  
  42.                  ApplicationInfo info = pm.getApplicationInfo(packname, 0);   
  43.                  return info.loadLabel(pm).toString();  
  44.             } catch (NameNotFoundException e) {  
  45.                 // TODO Auto-generated catch block  
  46.                 e.printStackTrace();  
  47.                 return null;  
  48.             }  
  49.     }  
  50.     /* 
  51.      * 获取程序的权限 
  52.      */  
  53.     public String[] getAppPremission(String packname){  
  54.           try {  
  55.               PackageInfo packinfo =    pm.getPackageInfo(packname, PackageManager.GET_PERMISSIONS);  
  56.               //获取到所有的权限   
  57.               return packinfo.requestedPermissions;  
  58.   
  59.             } catch (NameNotFoundException e) {  
  60.                 e.printStackTrace();  
  61.                 return null;  
  62.             }  
  63.     }  
  64.       
  65.       
  66.     /* 
  67.      * 获取程序的签名  
  68.      */  
  69.     public String getAppSignature(String packname){  
  70.           try {  
  71.               PackageInfo packinfo =    pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);  
  72.               //获取到所有的权限   
  73.               return packinfo.signatures[0].toCharsString();  
  74.   
  75.             } catch (NameNotFoundException e) {  
  76.                 e.printStackTrace();  
  77.                 return null;  
  78.             }  
  79.     }  
  80. }  

[java]  view plain copy
  1. /* 
  2.  * 杀死所有进程  
  3.  */  
  4. private void killAll() {  
  5.     for (int i = 0 ; i< userRunningAppProcessInfos.size();i++){  
  6.         System.out.println(userRunningAppProcessInfos.get(i).processName);  
  7.         activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);  
  8.     }  
  9.     // 更新显示的界面   
  10.     pd.show();  
  11.     new Thread(){  
  12.         @Override  
  13.         public void run() {  
  14.             initData();  
  15.             Message msg = new Message();  
  16.             msg.what = GET_RUNNING_APP_FINISH;  
  17.             hander.sendMessage(msg);  
  18.         }  
  19.     }.start();  
  20. }  
  21.   
  22. /* 
  23.  * 杀死选择的进程  
  24.  */  
  25. private void killSelected() {  
  26.     for (int i=0 ;i < isselected.size(); i++){  
  27.         if(isselected.get(i)){    //如果用户也选中则返回true  
  28.             //终止一个activity 需要用到 activitymanager  
  29.             activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);  
  30.         }  
  31.     }  
  32.     //更新listview的显示    
  33.     pd.show();  
  34.     new Thread(){  
  35.         @Override  
  36.         public void run() {  
  37.             initData();  
  38.             Message msg = new Message();  
  39.             msg.what = GET_RUNNING_APP_FINISH;  
  40.             hander.sendMessage(msg);  
  41.         }  
  42.     }.start();  
  43. }  
[java]  view plain copy
  1. /* 
  2.  * 获取系统的剩余内存 
  3.  */  
  4. ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  
  5. MemoryInfo outInfo =    new ActivityManager.MemoryInfo();  
  6. am.getMemoryInfo(outInfo);  
  7. long availMemorySize = outInfo.availMem;  
  8. String strMemorySize = availMemorySize/1024/1024 + "MB";  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值