<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <!-- 定义获取可用内存的按钮 -->    <Button        android:id="@+id/btn_main_ablememory"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="可用 的内存"/>    <!-- 定义查看正在运行的进程的按钮 -->    <Button        android:id="@+id/btn_main_lookruningmemory"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="查看正在运行的进程"/>    <!-- 定义显示当前进程数的标签控件 -->    <TextView        android:id="@+id/tv_main_currentprocessnum"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />    <!-- 定义进程列表控件 -->    <ListView        android:id="@+id/lv_main_list"        android:layout_width="fill_parent"        android:layout_height="wrap_content"/>    <!-- 定义获取内容显示的标签控件 -->    <TextView        android:id="@+id/tv_main_text"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

browse_process_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent" android:layout_height="80dip" android:orientation="vertical">    <LinearLayout android:layout_width="fill_parent"         android:layout_height="wrap_content" android:layout_marginLeft="10dip"        android:orientation="horizontal">        <TextView android:layout_width="100dip"            android:layout_height="wrap_content" android:text="进程ID : "></TextView>        <TextView android:id="@+id/tvProcessPID"            android:layout_width="wrap_content" android:layout_height="wrap_content"            android:layout_marginLeft="3dip" android:textColor="#FFD700"></TextView>    </LinearLayout>    <LinearLayout android:layout_width="fill_parent"        android:layout_height="wrap_content" android:layout_marginLeft="10dip"        android:orientation="horizontal">        <TextView android:layout_width="100dip"            android:layout_height="wrap_content" android:text="进程所在UID:"></TextView>        <TextView android:id="@+id/tvProcessUID"            android:layout_width="wrap_content" android:layout_height="wrap_content"            android:textColor="#FFD700"></TextView>    </LinearLayout>    <LinearLayout android:layout_width="fill_parent"        android:layout_height="wrap_content" android:layout_marginLeft="10dip"        android:orientation="horizontal">        <TextView android:layout_width="100dip"            android:layout_height="wrap_content" android:text="进程占用内存:"></TextView>        <TextView android:id="@+id/tvProcessMemSize"            android:layout_width="wrap_content" android:layout_height="wrap_content"            android:textColor="#FFD700"></TextView>    </LinearLayout>    <LinearLayout android:layout_width="fill_parent"        android:layout_height="wrap_content" android:layout_marginLeft="10dip"        android:orientation="horizontal">        <TextView android:layout_width="100dip"            android:layout_height="wrap_content" android:text="进程名:"></TextView>        <TextView android:id="@+id/tvProcessName"            android:layout_width="wrap_content" android:layout_height="wrap_content"            android:textColor="#FFD700"></TextView>    </LinearLayout></LinearLayout>

package com.example.yanlei.yl2;import android.app.ActivityManager;import android.app.ActivityManager.MemoryInfo;import android.content.Context;import android.os.Bundle;import android.os.Debug;import android.support.v7.app.AppCompatActivity;import android.text.format.Formatter;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    // 得到可用内存的按钮对象    private Button btnEnableMember;    // 查看运行的程序    private Button btnLookRuningMemory;    // 得到activity的管理对象    private ActivityManager mActivityManager;    // 显示可用内存的标签    private TextView tvText;    // 显示进程的列表对象    private ListView listviewProcess;    // 进程数组对象    private ArrayList<ProcessInfo> processInfoList;    // 显示进程总数的对象    private TextView tvCurrentProcessNum;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 得到布局中的控件        findView();        // 给控件设置监听器        setListener();        // 得到ActivityManager服务        mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);    }    private void setListener() {        // TODO Auto-generated method stub        btnEnableMember.setOnClickListener(listener);        btnLookRuningMemory.setOnClickListener(listener);    }    private void findView() {        // 得到布局中的控件对象        btnEnableMember = (Button) findViewById(R.id.btn_main_ablememory);        btnLookRuningMemory = (Button) findViewById(R.id.btn_main_lookruningmemory);        tvText = (TextView) findViewById(R.id.tv_main_text);        listviewProcess = (ListView) findViewById(R.id.lv_main_list);        tvCurrentProcessNum = (TextView) findViewById(R.id.tv_main_currentprocessnum);    }    OnClickListener listener = new OnClickListener() {        @Override        public void onClick(View v) {            // TODO Auto-generated method stub            switch (v.getId()) {                case R.id.btn_main_ablememory:                    // 得到系统可用的内存                    String availMemStr = getSystemAvaialbeMemorySize();                    // 设置textview的内容                    tvText.setText(availMemStr);                    // 设置textview可见                    tvText.setVisibility(View.VISIBLE);                    // 设置listview不可见                    listviewProcess.setVisibility(View.GONE);                    break;                case R.id.btn_main_lookruningmemory:                    // 设置textview不可见                    tvText.setVisibility(View.GONE);                    // 设置listview可见                    listviewProcess.setVisibility(View.VISIBLE);                    // 获得系统进程信息                    getRunningAppProcessInfo();                    // 向适配器中放置数据源                    setAdapter();                    break;                default:                    break;            }        }    };    protected String getSystemAvaialbeMemorySize() {        // TODO Auto-generated method stub        // 获得MemoryInfo对象        MemoryInfo memoryInfo = new MemoryInfo();        // 获得系统可用内存,保存在MemoryInfo对象上        mActivityManager.getMemoryInfo(memoryInfo);        long memSize = memoryInfo.availMem;        // 字符类型转换        String availMemStr = formateFileSize(memSize);        return availMemStr;    }    // 字符类型转换    private String formateFileSize(long size) {        return Formatter.formatFileSize(MainActivity.this, size);    }    // 向适配器中放置数据源    protected void setAdapter() {        // TODO Auto-generated method stub        ProcessInfoAdapter mprocessInfoAdapter = new ProcessInfoAdapter(this,                processInfoList);        listviewProcess.setAdapter(mprocessInfoAdapter);    }    // 获得系统进程信息    private void getRunningAppProcessInfo() {        // ProcessInfo Model类 用来保存所有进程信息        processInfoList = new ArrayList<ProcessInfo>();        // 通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程        List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager                .getRunningAppProcesses();        for (ActivityManager.RunningAppProcessInfo appProcessInfo : appProcessList) {            // 进程ID号            int pid = appProcessInfo.pid;            // 用户ID 类似于Linux的权限不同,ID也就不同 比如 root等            int uid = appProcessInfo.uid;            // 进程名,默认是包名或者由属性android:process=""指定            String processName = appProcessInfo.processName;            // 获得该进程占用的内存            int[] myMempid = new int[] { pid };            // 此MemoryInfo位于android.os.Debug.MemoryInfo包中,用来统计进程的内存信息            Debug.MemoryInfo[] memoryInfo = mActivityManager                    .getProcessMemoryInfo(myMempid);            // 获取进程占内存用信息 kb单位            int memSize = memoryInfo[0].dalvikPrivateDirty;            // 构造一个ProcessInfo对象            ProcessInfo processInfo = new ProcessInfo();            // 设置processinfo信息            processInfo.setPid(pid);            processInfo.setUid(uid);            processInfo.setMemSize(memSize);            processInfo.setProcessName(processName);            // 添加到processInfoList中            processInfoList.add(processInfo);        }        // 得到进程个数        tvCurrentProcessNum.setText("当前系统进程共有:" + processInfoList.size());    }}
ProcessInfo.java
package com.example.yanlei.yl2;//定义ProcessInfo类,代表一个进程的信息public class ProcessInfo {    private int pid; // 进程id  Android规定android.system.uid=1000    private int uid; // 进程所在的用户id ,即该进程是有谁启动的 root/普通用户等    private int memSize; // 进程占用的内存大小,单位为kb    private String processName; // 进程名    public ProcessInfo(){}    public int getPid() {        return pid;    }    public void setPid(int pid) {        this.pid = pid;    }    public int getUid() {        return uid;    }    public void setUid(int uid) {        this.uid = uid;    }    public int getMemSize() {        return memSize;    }    public void setMemSize(int memSize) {        this.memSize = memSize;    }    public String getProcessName() {        return processName;    }    public void setProcessName(String processName) {        this.processName = processName;    }}
ProcessInfoAdapter.java
package com.example.yanlei.yl2;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;//自定义适配器类,提供给listView的自定义viewpublic class ProcessInfoAdapter extends BaseAdapter {    // 需要显示的对象列表    private List<ProcessInfo> mlistProcessInfo = null;    LayoutInflater infater = null;    public ProcessInfoAdapter(Context context, List<ProcessInfo> apps) {        // 初始化infater对象        infater = (LayoutInflater) context                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);        // 初始化需要显示的mlistProcessInfo对象        mlistProcessInfo = apps;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        System.out.println("size" + mlistProcessInfo.size());        return mlistProcessInfo.size();    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return mlistProcessInfo.get(position);    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return 0;    }    @Override    public View getView(int position, View convertview, ViewGroup arg2) {        View view = null;        ViewHolder holder = null;        if (convertview == null || convertview.getTag() == null) {            // 通过XML得到VIEW            view = infater.inflate(R.layout.browse_process_item, null);            holder = new ViewHolder(view);            // 把查找的view缓存起来            view.setTag(holder);        } else {            view = convertview;            // 取出缓存的VIEW            holder = (ViewHolder) convertview.getTag();        }        // 得到ProcessInfo信息,并在item的每个位置显示相关信息        ProcessInfo processInfo = (ProcessInfo) getItem(position);        holder.tvPID.setText(processInfo.getPid() + "");        holder.tvUID.setText(processInfo.getUid() + "");        holder.tvProcessMemSize.setText(processInfo.getMemSize() + "KB");        holder.tvProcessName.setText(processInfo.getProcessName());        // 返回需要显示的view        return view;    }    // 占位符    class ViewHolder {        TextView tvPID; // 进程ID        TextView tvUID; // 用户ID        TextView tvProcessMemSize; // 进程占用内存大小        TextView tvProcessName; // 进程名        public ViewHolder(View view) {            this.tvPID = (TextView) view.findViewById(R.id.tvProcessPID);            this.tvUID = (TextView) view.findViewById(R.id.tvProcessUID);            this.tvProcessMemSize = (TextView) view                    .findViewById(R.id.tvProcessMemSize);            this.tvProcessName = (TextView) view                    .findViewById(R.id.tvProcessName);        }    }}

更多相关文章

  1. Android应用程序生命周期
  2. Android(安卓)命令工具
  3. Android(安卓)到底什么是Dialog?
  4. 读取网路图片
  5. Android获取CPU,内存等系统信息方法
  6. android pull解析XML文件
  7. android ZRAM
  8. SharedPreferences在多进程中的使用的问题
  9. Android(安卓)文件压缩和解压

随机推荐

  1. MySQL数据库语法-多表查询练习一
  2. MySQL - 更改一行的时间值以匹配同一表
  3. php将图片以二进制形式保存到mysql数据库
  4. 为什么插入忽略递增的auto_increment主键
  5. 解决The&#39;InnoDB&#39;feature is disa
  6. mysql常识以及存储引擎,锁和事务
  7. 05-mysql中的查询(第一章)
  8. Active Record或mysql中的批次计数
  9. Innode表空间碎片优化
  10. Win2003+IIS6.0+PHP+MYSQL+ASP+ASP.NET全