服务器之家

服务器之家 > 正文

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

时间:2021-04-27 15:38     来源/作者:傅荣康

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

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

效果图:

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

杀死全部进程

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

实现思路:

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

核心代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
 * 获取所有进程及用户 的进程
 */
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));
  }
}

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

?
1
2
3
4
5
6
7
8
/*
 * 获取某个进程占用的内存信息
 */
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");
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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;
      }
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
 * 杀死所有进程
 */
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();
}
?
1
2
3
4
5
6
7
8
/*
 * 获取系统的剩余内存
 */
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程序设计有所帮助。

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
返回顶部