显示所有APP的进程详细信息(进程ID、进程所在UID、进程占用内存、进程名)
main.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="fill_parent"
- android:gravity="center_vertical"
- android:orientation="vertical" >
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="50dip"
- android:layout_marginLeft="10dip"
- android:orientation="horizontal" >
- <TextView
- android:layout_width="120dip"
- android:layout_height="wrap_content"
- android:text="系统可用内存为:" />
- <TextView
- android:id="@+id/tvAvailMemory"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="#FFD700" />
- </LinearLayout>
- <Button
- android:id="@+id/btProcessInfo"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="查看系统进程信息" />
- </LinearLayout>
browse_process_list.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="fill_parent"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/tvTotalProcessNo"
- android:layout_width="fill_parent"
- android:layout_height="30dip"
- android:textSize="20sp" />
- <ListView
- android:id="@+id/listviewProcess"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_marginTop="10dip" />
- </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
- android:id="@+id/tvProcessPID"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="3dip"
- android:textColor="#FFD700" />
- </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
- android:id="@+id/tvProcessUID"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="#FFD700" />
- </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
- android:id="@+id/tvProcessMemSize"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="#FFD700" />
- </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
- android:id="@+id/tvProcessName"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="#FFD700" />
- </LinearLayout>
- </LinearLayout>
ProcessInfo.java
- package com.qin.ammp;
- //Model类
- public class ProcessInfo {
- // 进程id Android规定android.system.uid=1000
- private int pid;
- // 进程所在的用户id ,即该进程是有谁启动的 root/普通用户等
- private int uid;
- // 进程占用的内存大小,单位为kb
- private int memSize;
- // 进程名
- 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 setPocessName(String processName) {
- this.processName = processName;
- }
- }
MainActivity.java
- package com.qin.ammp;
- import android.app.Activity;
- import android.app.ActivityManager;
- import android.app.ActivityManager.MemoryInfo;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Bundle;
- import android.text.format.Formatter;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- private static String TAG = "AM_MEMORYIPROCESS" ;
- private ActivityManager mActivityManager = null ;
- private TextView tvAvailMem ;
- private Button btProcessInfo ;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- tvAvailMem = (TextView)findViewById(R.id.tvAvailMemory) ;
- btProcessInfo =(Button)findViewById(R.id.btProcessInfo);
- //跳转到显示进程信息界面
- btProcessInfo.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(MainActivity.this,BrowseProcessInfoActivity.class);
- startActivity(intent);
- }
- });
- //获得ActivityManager服务的对象
- mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
- //获得可用内存信息
- String availMemStr = getSystemAvaialbeMemorySize();
- Log.i(TAG, "The Availabel Memory Size is"+availMemStr);
- //显示
- tvAvailMem.setText(availMemStr);
- }
- //获得系统可用内存信息
- private String getSystemAvaialbeMemorySize(){
- //获得MemoryInfo对象
- MemoryInfo memoryInfo = new MemoryInfo() ;
- //获得系统可用内存,保存在MemoryInfo对象上
- mActivityManager.getMemoryInfo(memoryInfo) ;
- long memSize = memoryInfo.availMem ;
- //字符类型转换
- String availMemStr = formateFileSize(memSize);
- return availMemStr ;
- }
- //调用系统函数,字符串转换 long -String KB/MB
- private String formateFileSize(long size){
- return Formatter.formatFileSize(MainActivity.this, size);
- }
- }
BrowseProcessInfoActivity.java
- package com.qin.ammp;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.app.ActivityManager;
- import android.app.AlertDialog;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.os.Bundle;
- import android.os.Debug;
- import android.util.Log;
- import android.view.ContextMenu;
- import android.view.MenuItem;
- import android.view.View;
- import android.view.ContextMenu.ContextMenuInfo;
- import android.widget.AdapterView;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.AdapterView.OnItemClickListener;
- public class BrowseProcessInfoActivity extends Activity implements OnItemClickListener{
- private static String TAG = "ProcessInfo";
- private static final int KILL_PORCESS = 1;
- private static final int SEARCH_RUNNING_APP = 2;
- private ActivityManager mActivityManager = null;
- // ProcessInfo Model类 用来保存所有进程信息
- private List<ProcessInfo> processInfoList = null;
- private ListView listviewProcess;
- private TextView tvTotalProcessNo ;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.browse_process_list);
- listviewProcess = (ListView) findViewById(R.id.listviewProcess);
- listviewProcess.setOnItemClickListener(this);
- tvTotalProcessNo =(TextView)findViewById(R.id.tvTotalProcessNo);
- this.registerForContextMenu(listviewProcess);
- // 获得ActivityManager服务的对象
- mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
- // 获得系统进程信息
- getRunningAppProcessInfo();
- // 为ListView构建适配器对象
- BrowseProcessInfoAdapter mprocessInfoAdapter = new BrowseProcessInfoAdapter(
- this, processInfoList);
- listviewProcess.setAdapter(mprocessInfoAdapter);
- tvTotalProcessNo.setText("当前系统进程共有:"+processInfoList.size());
- }
- //杀死该进程,并且刷新
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1, final int position, long arg3) {
- // TODO Auto-generated method stub
- new AlertDialog.Builder(this).setMessage("是否杀死该进程")
- .setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // TODO Auto-generated method stub
- //杀死该进程,释放进程占用的空间
- mActivityManager.killBackgroundProcesses(processInfoList.get(position).getProcessName());
- //刷新界面
- getRunningAppProcessInfo() ;
- BrowseProcessInfoAdapter mprocessInfoAdapter = new BrowseProcessInfoAdapter(
- BrowseProcessInfoActivity.this, processInfoList);
- listviewProcess.setAdapter(mprocessInfoAdapter);
- tvTotalProcessNo.setText("当前系统进程共有:"+processInfoList.size());
- }
- }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // TODO Auto-generated method stub
- dialog.cancel() ;
- }
- }).create().show() ;
- }
- /**
- * 获得系统进程信息
- */
- 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;
- Log.i(TAG, "processName: " + processName + " pid: " + pid
- + " uid:" + uid + " memorySize is -->" + memSize + "kb");
- // 构造一个ProcessInfo对象
- ProcessInfo processInfo = new ProcessInfo();
- processInfo.setPid(pid);
- processInfo.setUid(uid);
- processInfo.setMemSize(memSize);
- processInfo.setPocessName(processName);
- processInfoList.add(processInfo);
- // 获得每个进程里运行的应用程序(包),即每个应用程序的包名
- String[] packageList = appProcessInfo.pkgList;
- Log.i(TAG, "process id is " + pid + "has " + packageList.length);
- for (String pkg : packageList) {
- Log.i(TAG, "packageName " + pkg + " in process id is -->"
- + pid);
- }
- }
- }
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- menu.add(0, 0, KILL_PORCESS, "杀死该进程");
- menu.add(0, 0, SEARCH_RUNNING_APP, "运行在该进程的应用程序");
- super.onCreateContextMenu(menu, v, menuInfo);
- }
- public boolean onContextItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case KILL_PORCESS: // 杀死该进程 , 重新加载界面
- new AlertDialog.Builder(this).setMessage("是否杀死该进程")
- .setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // TODO Auto-generated method stub
- }
- }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // TODO Auto-generated method stub
- dialog.cancel() ;
- }
- }).create().show() ;
- break;
- case SEARCH_RUNNING_APP: // 查看运行在该进程的应用程序信息
- break;
- default:
- break;
- }
- return super.onContextItemSelected(item);
- }
- }
BrowseProcessInfoAdapter.java
- package com.qin.ammp;
- 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 BrowseProcessInfoAdapter extends BaseAdapter {
- private List<ProcessInfo> mlistProcessInfo = null;
- LayoutInflater infater = null;
- public BrowseProcessInfoAdapter(Context context, List<ProcessInfo> apps) {
- infater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mlistProcessInfo = apps ;
- }
- @Override
- public int getCount() {
- System.out.println("size" + mlistProcessInfo.size());
- return mlistProcessInfo.size();
- }
- @Override
- public Object getItem(int position) {
- return mlistProcessInfo.get(position);
- }
- @Override
- public long getItemId(int position) {
- return 0;
- }
- @Override
- public View getView(int position, View convertview, ViewGroup arg2) {
- System.out.println("getView at " + position);
- View view = null;
- ViewHolder holder = null;
- if (convertview == null || convertview.getTag() == null) {
- view = infater.inflate(R.layout.browse_process_item, null);
- holder = new ViewHolder(view);
- view.setTag(holder);
- }
- else{
- view = convertview ;
- holder = (ViewHolder) convertview.getTag() ;
- }
- 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());
- 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) ;
- }
- }
- }
AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.qin.ammp"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".MainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name=".BrowseProcessInfoActivity"></activity>
- </application>
- <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
- </manifest>
显示所有APP的进程详细信息(进程ID、进程所在UID、进程占用内存、进程名)的更多相关文章
- Linux 查找指定名称的进程并显示进程详细信息
实际应用中可能有这样的场景:给定一个进程名称特征串,查找所有匹配该进程名称的进程的详细信息. 解决的办法是: (1) 先用pgrep [str] 命令进行模糊匹配,找到匹配该特征串的进程ID: (2) ...
- linux下查看运行进程详细信息
通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等.这时,我们需要通过以下的方法来查看进程的详细信息: Linux在启动一个进程时,系统会在/proc下创建一个 ...
- linux 查看运行进程详细信息
Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息 通过ll或ls –l命令即可查看. ll /proc/PID cwd符号链接的是进程运行 ...
- linux根据进程pid查看进程详细信息
http://note.youdao.com/noteshare?id=af2fdd34e3adfacda2d34706e16e5045
- Display a Detail View with a List View 主子视图-列表视图与详细信息视图同时显示
In this lesson, you will learn how to display a Detail View together with a List View. For this purp ...
- Linux 进程资源用量监控和按用户设置进程限制
每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工作的方 ...
- struts2:上传多个文件时实现带进度条、进度详细信息的示范
上一篇文章讲了上传单个文件与上传多个文件(属性驱动)的例子.本例是上传多个文件(属性驱动),并且显示进度条.进度详细信息的示范. 在文件上传选择界面,允许用户增加.删除选择的文件,且只能上传指定类型的 ...
- 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)
不过必须XP SP3以上才行.所有API大全: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).a ...
- 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?
1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...
随机推荐
- Cacti监控mysql数据库服务器实现过程
Cacti监控mysql数据库服务器实现过程 2014-05-29 0个评论 来源:Cacti监控mysql数据库服务器实现过程 收藏 我要投稿 1 先在cacti服务器端安 ...
- 前端纯css 图片的模糊处理
最近做的一个项目需要用到背景图的模糊处理,在网上查资料,发现用css的 filter 属性就可以解决,但是因为模糊度比较高,四周会有很长的模糊边,百度上也没找到解决的方法,,可喜的是最后我在分析一个d ...
- ssl证书文件
证书(Certificate) - *.cer *.crt私钥(Private Key) - *.key证书签名请求(Certificate signing request) - *.csr 至于pe ...
- springMVC中实现用户登录权限验证
通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor ...
- RSAProtectedConfigurationProvider加密web.config
上一篇文章介绍了用 DataProtectionConfigurationProvider加密web.config文件的方法,不过他有一个缺陷,加密的文件只有在本机才能解密,如果有多台服务器的话,则需 ...
- 171. Anagrams【medium】
Given an array of strings, return all groups of strings that are anagrams. Notice All inputs will be ...
- 关于Tensorflow 的数据读取环节
Tensorflow读取数据的一般方式有下面3种: preloaded直接创建变量:在tensorflow定义图的过程中,创建常量或变量来存储数据 feed:在运行程序时,通过feed_dict传入数 ...
- Linux下出现Read-only file system的解决办法
正常运行中的网站,忽然间出现session目录不可写,连接服务器一看,任何关于写硬盘的命令都不能用,提示Read-only file system,使用一条命令即可搞定此问题: mount -o re ...
- 关于EasyUI的Layout总结
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.layout以html标签方式建立的 <div id="content" region="center&q ...
- 数据库设计(四)数据库的规范化(Normalization)
数据库的规范化 Database Normalization is a technique of organizing the data in the database. Normalization ...