133.ListView显示进程信息

来源:互联网 发布:华娱无线java 编辑:程序博客网 时间:2024/06/06 09:11

通过ActivityManager获取进程相关信息,PackageManger获取包的相关信息,创建bean文件TaskInfo.java,然后初始化一个个进程bean的对象TaskInfoParser.java。创建布局文件初始化每一个List,然后在逻辑文件中实现显示。

每一个条目的布局文件item_task_manager.xml

<?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="horizontal" >        <ImageView         android:id="@+id/iv_icon"        android:layout_width="50dp"    android:layout_height="50dp"    android:background="@drawable/ic_launcher"        />    <LinearLayout         android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginLeft="5dp"    android:orientation="vertical"        >        <TextView             android:id="@+id/tv_name"            android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:textSize="20sp"    android:textColor="@color/black"    android:singleLine="true"    android:text="手机卫视"            />        <TextView             android:id="@+id/tv_app_memory_size"            android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:textSize="16sp"    android:layout_marginTop="2dp"    android:singleLine="true"    android:text="手机内存占用:1M"            />         </LinearLayout>    <RelativeLayout         android:layout_width="wrap_content"   android:layout_height="wrap_content"        >   <CheckBox       android:id="@+id/tv_app_status"         android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:textSize="16sp"   android:layout_marginTop="10dp"   android:layout_marginRight="10dp"   android:singleLine="true"   android:layout_alignParentRight="true"            />            </RelativeLayout></LinearLayout>

主界面activity_task_activity.xml

<?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         style="@style/TitleStyle"        android:text="进程管理"        />    <LinearLayout         android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal"        >        <TextView             android:id="@+id/tv_task_process_count"            android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="进行中进程1个"    android:layout_weight="1"    android:layout_marginLeft="5dp"    android:textColor="@color/black"            /><TextView     android:id="@+id/tv_task_memory"            android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="剩余/总内存"    android:layout_weight="1"    android:layout_marginLeft="5dp"    android:textColor="@color/black"            />            </LinearLayout>    <ListView         android:id="@+id/list_view"        android:layout_width="match_parent"    android:layout_height="match_parent"        ></ListView></LinearLayout>
TaskInfo.java进程的bean文件,封装task中所需要的信息

package com.ldw.safe.bean;import android.graphics.drawable.Drawable;/* * 进程的bean文件 */public class TaskInfo {private Drawable icon;private String packageName;private String appName;private long memorySize;//是否是用户进程private boolean userApp; //判断当前的item的条目是否被勾选上private boolean checked;public Drawable getIcon() {return icon;}public void setIcon(Drawable icon) {this.icon = icon;}public String getPackageName() {return packageName;}public void setPackageName(String packageName) {this.packageName = packageName;}public String getAppName() {return appName;}public void setAppName(String appName) {this.appName = appName;}public long getMemorySize() {return memorySize;}public void setMemorySize(long memorySize) {this.memorySize = memorySize;}public boolean isUserApp() {return userApp;}public void setUserApp(boolean userApp) {this.userApp = userApp;}public boolean isChecked() {return checked;}public void setChecked(boolean checked) {this.checked = checked;}@Overridepublic String toString() {return "TaskInfo [icon=" + icon + ", packageName=" + packageName+ ", appName=" + appName + ", memorySize=" + memorySize+ ", userApp=" + userApp + ", checked=" + checked + "]";}}

封装所有进程的bean文件TaskInfoParser.java

package com.ldw.safe.engine;import java.util.ArrayList;import java.util.List;import android.R.integer;import android.app.ActivityManager;import android.app.ActivityManager.RunningAppProcessInfo;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.PackageManager.NameNotFoundException;import android.graphics.drawable.Drawable;import android.os.Debug.MemoryInfo;import com.ldw.safe.R;import com.ldw.safe.bean.TaskInfo;/* * 进程信息的逻辑文件 */public class TaskInfoParser {public static List<TaskInfo> getTaskInfos(Context context) {//PackageManager包管理器PackageManager packageManager = context.getPackageManager();//创建一个集合存储进程相关信息List<TaskInfo> TaskInfos = new ArrayList<TaskInfo>();//获取到进程管理器ActivityManager activityManager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);//获取到手机上面所有运行的进程List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();for(RunningAppProcessInfo runningAppProcessInfo:appProcesses){//创建一个进程的beanTaskInfo taskInfo = new TaskInfo();//获取到进程的名字String processName = runningAppProcessInfo.processName;try {//获取到进程的包的信息PackageInfo packageInfo = packageManager.getPackageInfo(processName, 0);//获取到进程的PIDS,只有一个数据MemoryInfo[] memoryInfo = activityManager.getProcessMemoryInfo(new int[]{runningAppProcessInfo.pid});// Dirty弄脏// 获取到总共弄脏多少内存(当前应用程序占用多少内存)int totalPrivateDirty = memoryInfo[0].getTotalPrivateDirty() * 1024;// /获取到图片Drawable icon = packageInfo.applicationInfo.loadIcon(packageManager);// 获取到应用的名字String appName = packageInfo.applicationInfo.loadLabel(packageManager).toString();taskInfo.setAppName(appName);taskInfo.setMemorySize(totalPrivateDirty);taskInfo.setIcon(icon);System.out.println("-------------------");System.out.println("processName="+processName);System.out.println("appName="+appName);//获取到当前应用程序的标记int flags = packageInfo.applicationInfo.flags;//ApplicationInfo.FLAG_SYSTEM 表示系统应用程序if((flags & ApplicationInfo.FLAG_SYSTEM) != 0 ){//系统应用taskInfo.setUserApp(false);}else{///用户应用taskInfo.setUserApp(true);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();//没有图标的额时候设置默认的图标,将app的名字设置成进程名字taskInfo.setAppName(processName);taskInfo.setIcon(context.getResources().getDrawable(R.drawable.ic_launcher));}TaskInfos.add(taskInfo);}return TaskInfos;}}

业务逻辑文件TaskMangerActivity.java

package com.ldw.safe.Activity;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.text.format.Formatter;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.ldw.safe.R;import com.ldw.safe.bean.TaskInfo;import com.ldw.safe.engine.TaskInfoParser;import com.ldw.safe.utils.SharedPreferencesUtils;import com.ldw.safe.utils.SystemInfoUtils;import com.lidroid.xutils.ViewUtils;import com.lidroid.xutils.view.annotation.ViewInject;/* * 进程管理 */public class TaskManagerActivity extends Activity {@ViewInject(R.id.tv_task_process_count)private TextView tv_task_process_count;@ViewInject(R.id.tv_task_memory)private TextView tv_task_memory;@ViewInject(R.id.list_view)private ListView list_view;private long availMem;private long totalMem;private List<TaskInfo> taskInfos;private List<TaskInfo> userTaskInfos;private List<TaskInfo> systemAppInfos;private TaskManagerAdapter adapter;@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                        //初始化界面        initUi();        initData();}private class TaskManagerAdapter extends BaseAdapter{@Overridepublic int getCount() {return taskInfos.size();}@Overridepublic Object getItem(int position) {//获取到条目if (position == 0) {return null;} else if (position == userTaskInfos.size() + 1) {return null;}TaskInfo taskInfo;if (position < (userTaskInfos.size() + 1)) {// 用户程序taskInfo = userTaskInfos.get(position - 1);// 多了一个textview的标签 ,// 位置需要-1} else {// 系统程序int location = position - 1 - userTaskInfos.size() - 1;taskInfo = systemAppInfos.get(location);}return taskInfo;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//初始化动作,区分系统进程和第三方进程if (position == 0) {// 第0个位置显示的应该是 用户程序的个数的标签。TextView tv = new TextView(getApplicationContext());tv.setBackgroundColor(Color.GRAY);tv.setTextColor(Color.WHITE);tv.setText("第三方程序:" + userTaskInfos.size() + "个");return tv;} else if (position == (userTaskInfos.size() + 1)) {TextView tv = new TextView(getApplicationContext());tv.setBackgroundColor(Color.GRAY);tv.setTextColor(Color.WHITE);tv.setText("系统程序:" + systemAppInfos.size() + "个");return tv;}ViewHolder holder;View view;view = View.inflate(TaskManagerActivity.this, R.layout.item_task_manager, null);holder = new ViewHolder();holder.iv_icon = (ImageView) view.findViewById(R.id.iv_icon);holder.tv_name = (TextView) view.findViewById(R.id.tv_name);holder.tv_app_memory_size = (TextView) view.findViewById(R.id.tv_app_memory_size);holder.tv_app_status = (CheckBox) view.findViewById(R.id.tv_app_status);TaskInfo taskInfo;if (position < (userTaskInfos.size() + 1)) {// 第三方程序taskInfo = userTaskInfos.get(position - 1);// 多了一个textview的标签 ,// 位置需要-1} else {// 系统程序int location = position - 1 - userTaskInfos.size() - 1;taskInfo = systemAppInfos.get(location);}//设置图标holder.iv_icon.setImageDrawable(taskInfo.getIcon());//设置应用的名字holder.tv_name.setText(taskInfo.getAppName());//设置应用的大小holder.tv_app_memory_size.setText("内存占用:"+ Formatter.formatFileSize(TaskManagerActivity.this,taskInfo.getMemorySize()));//holder.tv_app_status.seview.setTag(holder);return view;}}static class ViewHolder{ImageView iv_icon;TextView tv_name;TextView tv_app_memory_size;CheckBox tv_app_status;}/*private Handler handler = new Handler(){public void handlerMessage(android.os.Message msg){adapter = new TaskManagerAdapter();list_view.setAdapter(adapter);};};*/private void initData() {new Thread(){public void run(){taskInfos = TaskInfoParser.getTaskInfos(TaskManagerActivity.this);//第三方进程userTaskInfos = new ArrayList<TaskInfo>();//系统进程systemAppInfos = new ArrayList<TaskInfo>();//初始化区分系统进程和第三方进程for (TaskInfo taskInfo : taskInfos) {if (taskInfo.isUserApp()) {userTaskInfos.add(taskInfo);} else {systemAppInfos.add(taskInfo);}}//不用发消息的方法显示//handler.sendEmptyMessage(0);runOnUiThread(new Runnable() {@Overridepublic void run() {adapter = new TaskManagerAdapter();list_view.setAdapter(adapter);}});};}.start();}/* * PackageManager包管理器 * ActivityManager活动管理器(任务管理器) *///初始化界面private void initUi() {setContentView(R.layout.activity_task_manager);ViewUtils.inject(this);/*封装起来//PackageManager packageManager = getPackageManager();//得到进程管理者ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);//获取到当前运行的进程List<RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();//获取当前手机上面一共有多少进程int size = runningAppProcesses.size();//设置UI * * *///获取到总的进程的数据int processCount = SystemInfoUtils.getProcessCount(this);tv_task_process_count.setText("运行中的进程" + processCount + "个");//可用内存availMem = SystemInfoUtils.getAvailMem(this);//总内存totalMem = SystemInfoUtils.getTotalMem(this);tv_task_memory.setText("剩余/总内存:" + Formatter.formatFileSize(TaskManagerActivity.this, availMem) + "/" +Formatter.formatFileSize(TaskManagerActivity.this, totalMem));/*代码整合到工具类中MemoryInfo memoryInfo = new MemoryInfo();//获取内存信息activityManager.getMemoryInfo(memoryInfo);availMem = memoryInfo.availMem;//这个代码不支持低版本手机totalMem = memoryInfo.totalMem;//手机总内存的文件保存在/proc/meminfo文件中的第一条,读取这个可以获取到总内存//这个形式表示MemTotal: 344740 kB// /proc/meminfo 配置文件的路径try {//创建一个输入流,配置文件的路径FileInputStream fis = new FileInputStream(new File("/proc/meminfo"));//读取文件内容BufferedReader reader = new BufferedReader(new InputStreamReader(fis));//读取第一行的信息String readLine = reader.readLine();StringBuffer sb = new StringBuffer();//获取到数字的内容for (char c : readLine.toCharArray()) {if (c >= '0' && c <= '9') {sb.append(c);}}totalMem = Long.parseLong(sb.toString()) * 1024;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}tv_task_memory.setText("剩余/总内存:" + Formatter.formatFileSize(TaskManagerActivity.this, availMem) + "/" +Formatter.formatFileSize(TaskManagerActivity.this, totalMem));*/}}




0 0
原创粉丝点击