Android编程实现任务管理器的方法
作者:傅荣康 时间:2022-11-30 00:32:15
本文实例讲述了Android编程实现任务管理器的方法。分享给大家供大家参考,具体如下:
任务管理器可以实现的功能有:
1.查看当前系统下运行的所有的进程
2.可以查看每个进程的进程号、版本号以及内存占用情况
3.杀死进程(可以杀死全部进程或者杀死指定的进程)
4.查看系统剩余内存
效果图:
杀死全部进程
实现思路:
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程序设计有所帮助。
标签:Android,任务管理器
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Spring的组合注解和元注解原理与用法详解
2023-12-05 10:25:05
android实现条目倒计时功能
2023-08-23 08:35:38
带你一文了解C#中的Expression
2023-04-20 04:37:57
![](https://img.aspxhome.com/file/2023/4/129634_0s.png)
Android检测Activity或者Service是否运行的方法
2021-09-03 00:52:00
Android如何实现非本地图片的点击态
2023-06-16 00:21:16
SpringBoot中如何统一接口返回与全局异常处理详解
2021-08-11 02:22:35
![](https://img.aspxhome.com/file/2023/9/129229_0s.png)
详解Android端与JavaWeb传输加密(DES+RSA)
2022-05-18 09:36:47
Java异常简介和架构_动力节点Java学院整理
2022-09-03 07:07:52
![](https://img.aspxhome.com/file/2023/8/77958_0s.jpg)
SpringBoot上传文件大小受限问题的解决办法
2023-04-19 09:46:16
![](https://img.aspxhome.com/file/2023/9/63629_0s.jpg)
Java中的functor实现
2023-11-26 08:30:50
Android实现简单计时器功能
2021-11-22 03:30:00
![](https://img.aspxhome.com/file/2023/6/138586_0s.jpg)
java实现数字转大写的方法
2021-11-04 21:39:45
java实现大文件分割与合并的实例代码
2023-11-11 04:31:21
基于Spring整合mybatis注解扫描是否成功的问题
2023-01-23 18:29:22
![](https://img.aspxhome.com/file/2023/9/71149_0s.png)
详解Java中运算符及用法
2023-11-29 08:17:57
详解c# 线程同步
2023-11-23 08:54:48
![](https://img.aspxhome.com/file/2023/8/94628_0s.png)
Spring RabbitMQ死信机制原理实例详解
2022-04-29 18:52:18
详解IDEA多module项目maven依赖的一些说明
2023-07-21 06:09:05
![](https://img.aspxhome.com/file/2023/4/67974_0s.png)
使用淘宝ip地址库查ip的示例
2023-02-05 19:19:11
解决RestTemplate 请求url中包含百分号 会被转义成25的问题
2022-11-01 22:59:51