软件编程
位置:首页>> 软件编程>> Android编程>> Android编程实现任务管理器的方法

Android编程实现任务管理器的方法

作者:傅荣康  发布时间:2022-11-30 00:32:15 

标签:Android,任务管理器

本文实例讲述了Android编程实现任务管理器的方法。分享给大家供大家参考,具体如下:
任务管理器可以实现的功能有:

1.查看当前系统下运行的所有的进程
2.可以查看每个进程的进程号、版本号以及内存占用情况
3.杀死进程(可以杀死全部进程或者杀死指定的进程)
4.查看系统剩余内存

效果图:

Android编程实现任务管理器的方法

杀死全部进程

Android编程实现任务管理器的方法

实现思路:

ActivityManager类可以获取到当前系统的所有进程,以及每个进程的信息,也可以杀死某个进程,
ActivityManager.getRunningAppProcesses();   获取系统的所有进程
ActivityManager.getProcessMemoryInfo(pids);  根据进程号获取每个进程的内存占用情况
ActivityManager.restartPackage(processName) ;  根据进程的包名杀死某个进程
PackageManager可以根据包名获取程序的图标、版本号、名字、权限、签名

核心代码:


/*
* 获取所有进程及用户 的进程
*/
protected void initData() {
 runningAppProcessInfos =ActivityManager.getRunningAppProcesses(); //获取所有的进程
 userRunningAppProcessInfos = new ArrayList<ActivityManager.RunningAppProcessInfo>();//获取用户的进程
 for(int i = 0; i< runningAppProcessInfos.size();i++){
    if("system".equals(runningAppProcessInfos.get(i).processName)
   ||"android.process.media".equals(runningAppProcessInfos.get(i).processName)
   ||"android.process.acore".equals(runningAppProcessInfos.get(i).processName)
   ){
      continue;
    }
    userRunningAppProcessInfos.add(runningAppProcessInfos.get(i));
 }
}

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


/*
* 获取某个进程占用的内存信息
*/
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
int[] pids = {userRunningAppProcessInfos.get(position).pid};
android.os.Debug.MemoryInfo[] memoryInfos = am.getProcessMemoryInfo(pids);
int memorysize = memoryInfos[0].getTotalPrivateDirty();
tv_app_memory.setText("内存占用为 "+ memorysize +" KB");


public class TaskInfo {
 Context context ;
 PackageManager pm ;
 public TaskInfo(Context context) {
   this.context = context;
   pm = context.getPackageManager();
 }
 /*
  * 根据包名 查询 图标
  */
 public Drawable getAppIcon(String packname){
  try {
      ApplicationInfo info = pm.getApplicationInfo(packname, 0);
      return info.loadIcon(pm);
   } catch (NameNotFoundException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     return null;
   }
 }
 /*
  *获取程序的版本号
  */
 public String getAppVersion(String packname){
    try {
      PackageInfo packinfo =  pm.getPackageInfo(packname, 0);
      return packinfo.versionName;
     } catch (NameNotFoundException e) {
       e.printStackTrace();
       return null;
     }
 }
 /*
  * 获取程序的名字
  */
 public String getAppName(String packname){
    try {
        ApplicationInfo info = pm.getApplicationInfo(packname, 0);
        return info.loadLabel(pm).toString();
     } catch (NameNotFoundException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       return null;
     }
 }
 /*
  * 获取程序的权限
  */
 public String[] getAppPremission(String packname){
    try {
      PackageInfo packinfo =  pm.getPackageInfo(packname, PackageManager.GET_PERMISSIONS);
      //获取到所有的权限
      return packinfo.requestedPermissions;
     } catch (NameNotFoundException e) {
       e.printStackTrace();
       return null;
     }
 }
 /*
  * 获取程序的签名
  */
 public String getAppSignature(String packname){
    try {
      PackageInfo packinfo =  pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);
      //获取到所有的权限
      return packinfo.signatures[0].toCharsString();
     } catch (NameNotFoundException e) {
       e.printStackTrace();
       return null;
     }
 }
}


/*
* 杀死所有进程
*/
private void killAll() {
 for (int i = 0 ; i< userRunningAppProcessInfos.size();i++){
   System.out.println(userRunningAppProcessInfos.get(i).processName);
   activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);
 }
 // 更新显示的界面
 pd.show();
 new Thread(){
   @Override
   public void run() {
     initData();
     Message msg = new Message();
     msg.what = GET_RUNNING_APP_FINISH;
     hander.sendMessage(msg);
   }
 }.start();
}
/*
* 杀死选择的进程
*/
private void killSelected() {
 for (int i=0 ;i < isselected.size(); i++){
   if(isselected.get(i)){  //如果用户也选中则返回true
     //终止一个activity 需要用到 activitymanager
     activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);
   }
 }
 //更新listview的显示
 pd.show();
 new Thread(){
   @Override
   public void run() {
     initData();
     Message msg = new Message();
     msg.what = GET_RUNNING_APP_FINISH;
     hander.sendMessage(msg);
   }
 }.start();
}


/*
* 获取系统的剩余内存
*/
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo outInfo =  new ActivityManager.MemoryInfo();
am.getMemoryInfo(outInfo);
long availMemorySize = outInfo.availMem;
String strMemorySize = availMemorySize/1024/1024 + "MB";

希望本文所述对大家Android程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com