<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的自定义view
public 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);
}
}
}

android 查看手机运行的进程列表的更多相关文章

  1. Android 查看手机中所有进程

    真机测试的时候发现DDMS对进程的显示很不给力,一些进程管理工具又不显示包名. 所以就自己写了一个小程序,查看自己手机中的进程,显示当前时间和进程的包名: 程序运行截图: 布局: <Linear ...

  2. mysql 查看正在运行的进程

    show processlist ; 显示正在运行的进程,使用Kill命令删除 kill 5260;

  3. Android获取手机安装的浏览器列表

    最近碰到一个同事询问如何查询本地安装的浏览器列表,其使用的代码如下: public static List<ResolveInfo> getBrowserList(Context cont ...

  4. Linux 查看运行中进程的 umask

    线上某台虚机因为故障重装了系统(基线 CentOS 6.9 内核 2.6.x),重新部署了应用.这个应用会生成一个文件,到NFS挂载目录. 而这个 NFS 挂载目录是一个 FTP 服务器的目录.另一台 ...

  5. Visual Studio 调试系列10 附加到正在运行的进程

    系列目录     [已更新最新开发文章,点击查看详细] 可将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程. 进程运行后,在 Visual Studio 中选择“调试” & ...

  6. android 查看当前正在运行的进程

    转载至 https://github.com/wenmingvs/AndroidProcess 因为Android5.0以上的权限封锁,无法直接获取正在运行的进程,此文总共介绍6中方法获取, 详细介绍 ...

  7. 【Android先进】查看手机记忆库状态和应用方法

    一世 我们知道.android程序存储器通常被限制16M.当然,24M的,和android程序存储器分为2部分:native和dalvik.dalvik 就是我们寻常说的java堆.我们创建的对象是在 ...

  8. 【转】android IDE——通过DDMS查看app运行时所占内存情况

    在Android内存优化方面,我们不可能做到没有大内存的占用情况. 所以有时候要清楚我们的app到底占用了多少内存,哪一步操作占用了多少的内存. 这时候,android的ddms中提供了一个工具,是可 ...

  9. win7 cmd终端连接android手机运行adb shell脚本命令

    win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...

随机推荐

  1. LeetCode 买卖股票的最佳时机 II

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...

  2. 前端,基础选择器,嵌套关系.display属性,盒模型

    基础选择器 1.统配选择器 控制html,body及body内跟显示相关的标签 *{ width:80px; height:80px; background-color:red; } 2.类选择器 以 ...

  3. Ubuntu 16.04上thunderbird配置163邮箱出现“配置无法被验证-请查看用户名或密码是否正确?”

    在Ubuntu 16.04 上用thunderbird配置163免费邮箱时出现的提示信息如图1: 图1 提示信息 网上有不少方法都说是将接收和发出的主机名分别改为 imap.ym.163.com 和 ...

  4. Linux下Tomcat的安装和部署

    一.安装tomcat 1.下载tomcat安装包apache-tomcat-7.0.62.tar.gz和jdk1.7 2.安装tomcat,将apache-tomcat-7.0.62.tar.gz复制 ...

  5. luogu1963 [NOI2009]变换序列

    #include <iostream> #include <cstring> #include <cstdio> using namespace std; int ...

  6. HDU 5536 Chip Factory

    Chip Factory Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)T ...

  7. 【java基础 7】java内存区域分析及常见异常

    本篇博客,主要是读书笔记总结,还有就是结合培训分享的总结,没有太多的技术含量! java 的自动内存管理机制,使得程序员不用为每一个new惭怍的对象写配对的delete/ free代码(回想起C++的 ...

  8. [UOJ#122][NOI2013]树的计数

    [UOJ#122][NOI2013]树的计数 试题描述 我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的 DFS 序以及 BFS 序.两棵不同的树的 DFS 序 ...

  9. BZOJ 3230 相似子串 ——后缀数组

    题目的Source好有趣. 我们求出SA,然后求出每一个后缀中与前面本质不同的字符串的个数. 然后二分求出当前的字符串. 然后就是正反两次后缀数组求LCP的裸题了. 要注意,这时两个串的起点可能会相同 ...

  10. 【2018.11.23】2018WCTest(8)

    T1 小 $X$ 无敌就是指他的防御 $\ge$ 怪物的攻击 $n$.另外小 $X$ 最多只需要把攻击加到怪物的防御 $k$,此时已经能一招秒一个,再多加必定无用且需承受更多伤害. $20$ 分 $d ...