Android实现任务管理器
16lz
2021-01-26
任务管理器可以实现的功能有:
1.查看当前系统下运行的所有的进程
2.可以查看每个进程的进程号、版本号以及内存占用情况
3.杀死进程(可以杀死全部进程或者杀死指定的进程)
4.查看系统剩余内存
效果图: 杀死全部进程
实现思路:
ActivityManager类可以获取到当前系统的所有进程,以及每个进程的信息,也可以杀死某个进程,
ActivityManager.getRunningAppProcesses(); 获取系统的所有进程
ActivityManager.getProcessMemoryInfo(pids); 根据进程号获取每个进程的内存占用情况
ActivityManager.restartPackage(processName) ; 根据进程的包名杀死某个进程
PackageManager可以根据包名获取程序的图标、版本号、名字、权限、签名
核心代码:
[java] view plain copy
- /*
- *获取所有进程及用户的进程
- */
- protectedvoidinitData(){
- runningAppProcessInfos=ActivityManager.getRunningAppProcesses();//获取所有的进程
- userRunningAppProcessInfos=newArrayList<ActivityManager.RunningAppProcessInfo>();//获取用户的进程
- for(inti=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));
- }
- }
注:杀死全部进程实际上杀死的是用户的所有进程,系统进程是无法杀死的,所以这里要获取到用户的所有的进程。
- /*
- *获取某个进程占用的内存信息
- */
- ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
- int[]pids={userRunningAppProcessInfos.get(position).pid};
- android.os.Debug.MemoryInfo[]memoryInfos=am.getProcessMemoryInfo(pids);
- intmemorysize=memoryInfos[0].getTotalPrivateDirty();
- tv_app_memory.setText("内存占用为"+memorysize+"KB");
[java] view plain copy
- publicclassTaskInfo{
- Contextcontext;
- PackageManagerpm;
- publicTaskInfo(Contextcontext){
- this.context=context;
- pm=context.getPackageManager();
- }
- /*
- *根据包名查询图标
- */
- publicDrawablegetAppIcon(Stringpackname){
- try{
- ApplicationInfoinfo=pm.getApplicationInfo(packname,0);
- returninfo.loadIcon(pm);
- }catch(NameNotFoundExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- returnnull;
- }
- }
- /*
- *获取程序的版本号
- */
- publicStringgetAppVersion(Stringpackname){
- try{
- PackageInfopackinfo=pm.getPackageInfo(packname,0);
- returnpackinfo.versionName;
- }catch(NameNotFoundExceptione){
- e.printStackTrace();
- returnnull;
- }
- }
- /*
- *获取程序的名字
- */
- publicStringgetAppName(Stringpackname){
- try{
- ApplicationInfoinfo=pm.getApplicationInfo(packname,0);
- returninfo.loadLabel(pm).toString();
- }catch(NameNotFoundExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- returnnull;
- }
- }
- /*
- *获取程序的权限
- */
- publicString[]getAppPremission(Stringpackname){
- try{
- PackageInfopackinfo=pm.getPackageInfo(packname,PackageManager.GET_PERMISSIONS);
- //获取到所有的权限
- returnpackinfo.requestedPermissions;
- }catch(NameNotFoundExceptione){
- e.printStackTrace();
- returnnull;
- }
- }
- /*
- *获取程序的签名
- */
- publicStringgetAppSignature(Stringpackname){
- try{
- PackageInfopackinfo=pm.getPackageInfo(packname,PackageManager.GET_SIGNATURES);
- //获取到所有的权限
- returnpackinfo.signatures[0].toCharsString();
- }catch(NameNotFoundExceptione){
- e.printStackTrace();
- returnnull;
- }
- }
- }
[java] view plain copy
- /*
- *杀死所有进程
- */
- privatevoidkillAll(){
- for(inti=0;i<userRunningAppProcessInfos.size();i++){
- System.out.println(userRunningAppProcessInfos.get(i).processName);
- activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);
- }
- //更新显示的界面
- pd.show();
- newThread(){
- @Override
- publicvoidrun(){
- initData();
- Messagemsg=newMessage();
- msg.what=GET_RUNNING_APP_FINISH;
- hander.sendMessage(msg);
- }
- }.start();
- }
- /*
- *杀死选择的进程
- */
- privatevoidkillSelected(){
- for(inti=0;i<isselected.size();i++){
- if(isselected.get(i)){//如果用户也选中则返回true
- //终止一个activity需要用到activitymanager
- activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);
- }
- }
- //更新listview的显示
- pd.show();
- newThread(){
- @Override
- publicvoidrun(){
- initData();
- Messagemsg=newMessage();
- msg.what=GET_RUNNING_APP_FINISH;
- hander.sendMessage(msg);
- }
- }.start();
- }
- /*
- *获取系统的剩余内存
- */
- ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
- MemoryInfooutInfo=newActivityManager.MemoryInfo();
- am.getMemoryInfo(outInfo);
- longavailMemorySize=outInfo.availMem;
- StringstrMemorySize=availMemorySize/1024/1024+"MB";
更多相关文章
- Android(安卓)系统属性SystemProperty分析
- Phonegap获取imei (修改phonegap官方提供文件)
- Android获取外部和内部存储空间总大小
- Android(安卓)GPS定位实现
- Android进程间通信
- 获取Android手机上的图片和视频缩略图
- 下载 android source 之repo获取
- 深入理解 Android(安卓)卷I - 第4章 深入理解 Zygote
- android:Bitmap和Drawable相互转换方法