本文实例讲述了android编程实现任务管理器的方法。分享给大家供大家参考,具体如下:
任务管理器可以实现的功能有:
1.查看当前系统下运行的所有的进程
2.可以查看每个进程的进程号、版本号以及内存占用情况
3.杀死进程(可以杀死全部进程或者杀死指定的进程)
4.查看系统剩余内存
效果图:
杀死全部进程
实现思路:
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程序设计有所帮助。