您的位置:首页 > 其它

我的手机管家(2) 进程管理布局

2016-07-04 16:33 253 查看
我的手机管家(2) 进程管理

(1)获取进程信息:所有的进程信息, 正在运行的进程信息, 剩余可用内存

(2)获取进程信息是一个耗时的操作,

   首先在使用子线程获取进程信息的时候显示缓冲界面,缓冲加载完成后,

   通知LIstView展示数据,加载适配器, 同时缓冲结束

 

获取进程信息的提供者:

package com.ejob.phonesafe.provider;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import android.R;
import android.R.drawable;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Debug;
import com.ejob.phonesafe.entity.ProcessInfo;
/**
*进程信息的提供者
*/
public class ProcessInfoProvider {
/**
* 获取正在运行的所有的进程
*/
public static List<ProcessInfo> getRunningProcess(Context ctx){
List<ProcessInfo> list= new ArrayList<ProcessInfo>();
//获取activity引用管理器
ActivityManager manager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
//获取正在运行的app应用
List<RunningAppProcessInfo> runninglist = manager.getRunningAppProcesses();
//获取包
PackageManager packageManager = ctx.getPackageManager();

for(RunningAppProcessInfo p : runninglist){
//获取应用的名,图标,应用进程/系统进程,所占内存,报名
ProcessInfo info = new ProcessInfo();
//包名
String pm = p.processName;
info.setPackageName(pm);
//根据进程id(pid)获得内存信息
Debug.MemoryInfo[] memoryInfos=    manager.getProcessMemoryInfo(new int[]{p.pid});
//所占内存
long totalPrivateDirty = memoryInfos[0].getTotalPrivateDirty()*1024;//当前应用所占的内存长度 单位是kb
info.setMomery(totalPrivateDirty);
try {
//根据包名获取app信息
ApplicationInfo pInfo=packageManager.getApplicationInfo(pm, 0);
//获取应用图标
Drawable icon=pInfo.loadIcon(packageManager);
info.setIcon(icon);
//应用程序名
String  appName = pInfo.loadLabel(packageManager).toString();
info.setName(appName);
//系统应用/用户应用
int flags=pInfo.flags;
if((flags&ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){
info.setUserProcess(false);//系统应用
}else{
info.setUserProcess(true);//用户应用
}
} catch (Exception e) {
e.printStackTrace();
//某些系统级别的应用获取不了图标,应用名
info.setIcon(ctx.getResources().getDrawable(R.drawable.progress_horizontal));
info.setPackageName(pm);
info.setUserProcess(false);
}
list.add(info);
}
return list;
}
/**
* 获取正在运行应用程序的个数
*/
public static int getRunningProcessNumber(Context ct){
ActivityManager manager = (ActivityManager) ct.getSystemService(ct.ACTIVITY_SERVICE);
return manager.getRunningAppProcesses().size();
}
/**
* 获取剩余内存
*/
public static long getAvailMenory(Context ctx){
ActivityManager manager = (ActivityManager) ctx.getSystemService(ctx.ACTIVITY_SERVICE);
MemoryInfo info = new MemoryInfo();//空对象
manager.getMemoryInfo(info);//该对象在给我们的空对象复制
return info.availMem;
}
/**
* 获取总内存
*/
public static long getAllAvailMenory(Context ctx){
/*ActivityManager manager = (ActivityManager) ctx.getSystemService(ctx.ACTIVITY_SERVICE);
MemoryInfo info = new MemoryInfo();
info.totalMem;//获取从内存,但是4.1一下的系统不支持,只能读取proc/meminfo
*/
try {
/**
* adb devices;
* adb -s 设备名 shell;
* ls
* cd  proc
* cat meminfo
*
*
* cat /proc/meminfo
* MemTotal: 3266180 kB
* MemFree: 17456 kB
* Buffers:111328 kB
* Cached: 2664024 kB
* SwapCached: 0 kB
* Active: 467236 kB
*/

FileReader reader = new FileReader("proc/meminfo");
BufferedReader br = new BufferedReader(reader);
String line=br.readLine();
char []arrChar=line.toCharArray();
StringBuffer sr = new StringBuffer();
for(char c:arrChar){
if(c>='0'&c<='9'){
sr.append(c);
}
}
String str = sr.toString();
long allNum=Long.parseLong(str)*1024;
return allNum;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
/**
* 杀死后台所有进程
*/
public static void killAll(Context ctx){
ActivityManager manager = (ActivityManager) ctx.getSystemService(ctx.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> list = manager.getRunningAppProcesses();
for (RunningAppProcessInfo info : list) {
if(ctx.getPackageName().equals(info.processName)){
continue;//跳过本应用程序,继续杀掉其他进程
}else{
manager.killBackgroundProcesses(info.processName);
}

}

}
}


进程管理界面:

 一个Fragment布局包含一个缓冲加载布局

         和一个ListView布局

用于缓冲和listview展示切换

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<!-- 进程管理界面 -->

<TextView
android:id="@+id/apm_header"
style="@style/title_style"
android:text="进程管理" >
</TextView>

<RelativeLayout
android:id="@+id/apm_rl1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="3dp" >

<TextView
android:id="@+id/apm_rl1_tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="运行中的进程:" />

<TextView
android:id="@+id/apm_rl1_tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="剩余内存/总内存:" />
</RelativeLayout>

<FrameLayout
android:id="@+id/apm_pl1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >

<ListView
android:id="@+id/amp_pl1_lv1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>

<LinearLayout
android:id="@+id/apm_pl1_ll1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical" >

<ProgressBar
android:id="@+id/apm_pl1_ll1_pb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正在加载请稍后..." />
</LinearLayout>

<TextView
android:id="@+id/tv_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:padding="5dp"
android:text="用户进程(0)"
android:textColor="#bcbcb5"
android:textSize="18sp" />
</FrameLayout>

<LinearLayout
android:id="@+id/amp_ll1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
android:id="@+id/amp_ll1_btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="selectAll"
android:background="@drawable/btn_light_green_selector"
android:text="全选" />

<Button
android:id="@+id/amp_ll1_btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="unSelect"
android:background="@drawable/btn_light_green_selector"
android:text="反选" />

<Button
android:id="@+id/amp_ll1_btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/btn_light_green_selector"
android:onClick="cleanAllSelect"
android:text="一键清理" />

<Button
android:id="@+id/amp_ll1_btn4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/btn_light_green_selector"
android:onClick="onSettings"
android:text="设置" />
</LinearLayout>

</LinearLayout>


    

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: