android平台下实现一个进程管理器,Android编程实现任务管理器的方法

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

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

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

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

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

4.查看系统剩余内存

效果图:

cb7f8c24ff5aab5d60be1f866daa7185.gif

杀死全部进程

d10d61524e141a8791f0213529563be7.gif

实现思路:

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

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

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

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

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

核心代码:

/*

* 获取所有进程及用户 的进程

*/

protected void initData() {

runningAppProcessInfos =ActivityManager.getRunningAppProcesses(); //获取所有的进程

userRunningAppProcessInfos = new ArrayList();//获取用户的进程

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值