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

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

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

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

4.查看系统剩余内存


效果图: 杀死全部进程


实现思路:

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

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

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

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


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


核心代码:

[java] view plain copy
  1. /*
  2. *获取所有进程及用户的进程
  3. */
  4. protectedvoidinitData(){
  5. runningAppProcessInfos=ActivityManager.getRunningAppProcesses();//获取所有的进程
  6. userRunningAppProcessInfos=newArrayList<ActivityManager.RunningAppProcessInfo>();//获取用户的进程
  7. for(inti=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. ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
  5. int[]pids={userRunningAppProcessInfos.get(position).pid};
  6. android.os.Debug.MemoryInfo[]memoryInfos=am.getProcessMemoryInfo(pids);
  7. intmemorysize=memoryInfos[0].getTotalPrivateDirty();
  8. tv_app_memory.setText("内存占用为"+memorysize+"KB");


[java] view plain copy
  1. publicclassTaskInfo{
  2. Contextcontext;
  3. PackageManagerpm;
  4. publicTaskInfo(Contextcontext){
  5. this.context=context;
  6. pm=context.getPackageManager();
  7. }
  8. /*
  9. *根据包名查询图标
  10. */
  11. publicDrawablegetAppIcon(Stringpackname){
  12. try{
  13. ApplicationInfoinfo=pm.getApplicationInfo(packname,0);
  14. returninfo.loadIcon(pm);
  15. }catch(NameNotFoundExceptione){
  16. //TODOAuto-generatedcatchblock
  17. e.printStackTrace();
  18. returnnull;
  19. }
  20. }
  21. /*
  22. *获取程序的版本号
  23. */
  24. publicStringgetAppVersion(Stringpackname){
  25. try{
  26. PackageInfopackinfo=pm.getPackageInfo(packname,0);
  27. returnpackinfo.versionName;
  28. }catch(NameNotFoundExceptione){
  29. e.printStackTrace();
  30. returnnull;
  31. }
  32. }
  33. /*
  34. *获取程序的名字
  35. */
  36. publicStringgetAppName(Stringpackname){
  37. try{
  38. ApplicationInfoinfo=pm.getApplicationInfo(packname,0);
  39. returninfo.loadLabel(pm).toString();
  40. }catch(NameNotFoundExceptione){
  41. //TODOAuto-generatedcatchblock
  42. e.printStackTrace();
  43. returnnull;
  44. }
  45. }
  46. /*
  47. *获取程序的权限
  48. */
  49. publicString[]getAppPremission(Stringpackname){
  50. try{
  51. PackageInfopackinfo=pm.getPackageInfo(packname,PackageManager.GET_PERMISSIONS);
  52. //获取到所有的权限
  53. returnpackinfo.requestedPermissions;
  54. }catch(NameNotFoundExceptione){
  55. e.printStackTrace();
  56. returnnull;
  57. }
  58. }
  59. /*
  60. *获取程序的签名
  61. */
  62. publicStringgetAppSignature(Stringpackname){
  63. try{
  64. PackageInfopackinfo=pm.getPackageInfo(packname,PackageManager.GET_SIGNATURES);
  65. //获取到所有的权限
  66. returnpackinfo.signatures[0].toCharsString();
  67. }catch(NameNotFoundExceptione){
  68. e.printStackTrace();
  69. returnnull;
  70. }
  71. }
  72. }

[java] view plain copy
  1. /*
  2. *杀死所有进程
  3. */
  4. privatevoidkillAll(){
  5. for(inti=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. newThread(){
  12. @Override
  13. publicvoidrun(){
  14. initData();
  15. Messagemsg=newMessage();
  16. msg.what=GET_RUNNING_APP_FINISH;
  17. hander.sendMessage(msg);
  18. }
  19. }.start();
  20. }
  21. /*
  22. *杀死选择的进程
  23. */
  24. privatevoidkillSelected(){
  25. for(inti=0;i<isselected.size();i++){
  26. if(isselected.get(i)){//如果用户也选中则返回true
  27. //终止一个activity需要用到activitymanager
  28. activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);
  29. }
  30. }
  31. //更新listview的显示
  32. pd.show();
  33. newThread(){
  34. @Override
  35. publicvoidrun(){
  36. initData();
  37. Messagemsg=newMessage();
  38. msg.what=GET_RUNNING_APP_FINISH;
  39. hander.sendMessage(msg);
  40. }
  41. }.start();
  42. }
[java] view plain copy
  1. /*
  2. *获取系统的剩余内存
  3. */
  4. ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
  5. MemoryInfooutInfo=newActivityManager.MemoryInfo();
  6. am.getMemoryInfo(outInfo);
  7. longavailMemorySize=outInfo.availMem;
  8. StringstrMemorySize=availMemorySize/1024/1024+"MB";

更多相关文章

  1. Android(安卓)系统属性SystemProperty分析
  2. Phonegap获取imei (修改phonegap官方提供文件)
  3. Android获取外部和内部存储空间总大小
  4. Android(安卓)GPS定位实现
  5. Android进程间通信
  6. 获取Android手机上的图片和视频缩略图
  7. 下载 android source 之repo获取
  8. 深入理解 Android(安卓)卷I - 第4章 深入理解 Zygote
  9. android:Bitmap和Drawable相互转换方法

随机推荐

  1. Android(安卓)Dialog 去除背景内容模糊
  2. AndFire防火墙1.2版本发布
  3. android之TextVIew与Button交互
  4. 3.Retrofit上传头像给后端
  5. 实现类似Android联系人搜索功能
  6. android App Widgets
  7. 【HR小时制】如何获取Android系统时间的
  8. Android(安卓)DEX Preopt prebuilt apks
  9. android图片切换ImageSwichter的动画切换
  10. android hander 线程用法