main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:gravity="center_vertical"
  6. android:orientation="vertical" >
  7.  
  8. <LinearLayout
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:layout_marginBottom="50dip"
  12. android:layout_marginLeft="10dip"
  13. android:orientation="horizontal" >
  14.  
  15. <TextView
  16. android:layout_width="120dip"
  17. android:layout_height="wrap_content"
  18. android:text="系统可用内存为:" />
  19.  
  20. <TextView
  21. android:id="@+id/tvAvailMemory"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:textColor="#FFD700" />
  25. </LinearLayout>
  26.  
  27. <Button
  28. android:id="@+id/btProcessInfo"
  29. android:layout_width="fill_parent"
  30. android:layout_height="wrap_content"
  31. android:text="查看系统进程信息" />
  32.  
  33. </LinearLayout>

browse_process_list.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:id="@+id/tvTotalProcessNo"
  8. android:layout_width="fill_parent"
  9. android:layout_height="30dip"
  10. android:textSize="20sp" />
  11. <ListView
  12. android:id="@+id/listviewProcess"
  13. android:layout_width="fill_parent"
  14. android:layout_height="fill_parent"
  15. android:layout_marginTop="10dip" />
  16.  
  17. </LinearLayout>

browse_process_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="80dip"
  5. android:orientation="vertical" >
  6.  
  7. <LinearLayout
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:layout_marginLeft="10dip"
  11. android:orientation="horizontal" >
  12. <TextView
  13. android:layout_width="100dip"
  14. android:layout_height="wrap_content"
  15. android:text="进程ID : " />
  16. <TextView
  17. android:id="@+id/tvProcessPID"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:layout_marginLeft="3dip"
  21. android:textColor="#FFD700" />
  22. </LinearLayout>
  23.  
  24. <LinearLayout
  25. android:layout_width="fill_parent"
  26. android:layout_height="wrap_content"
  27. android:layout_marginLeft="10dip"
  28. android:orientation="horizontal" >
  29. <TextView
  30. android:layout_width="100dip"
  31. android:layout_height="wrap_content"
  32. android:text="进程所在UID:" />
  33. <TextView
  34. android:id="@+id/tvProcessUID"
  35. android:layout_width="wrap_content"
  36. android:layout_height="wrap_content"
  37. android:textColor="#FFD700" />
  38. </LinearLayout>
  39.  
  40. <LinearLayout
  41. android:layout_width="fill_parent"
  42. android:layout_height="wrap_content"
  43. android:layout_marginLeft="10dip"
  44. android:orientation="horizontal" >
  45. <TextView
  46. android:layout_width="100dip"
  47. android:layout_height="wrap_content"
  48. android:text="进程占用内存:" />
  49. <TextView
  50. android:id="@+id/tvProcessMemSize"
  51. android:layout_width="wrap_content"
  52. android:layout_height="wrap_content"
  53. android:textColor="#FFD700" />
  54. </LinearLayout>
  55.  
  56. <LinearLayout
  57. android:layout_width="fill_parent"
  58. android:layout_height="wrap_content"
  59. android:layout_marginLeft="10dip"
  60. android:orientation="horizontal" >
  61. <TextView
  62. android:layout_width="100dip"
  63. android:layout_height="wrap_content"
  64. android:text="进程名:" />
  65. <TextView
  66. android:id="@+id/tvProcessName"
  67. android:layout_width="wrap_content"
  68. android:layout_height="wrap_content"
  69. android:textColor="#FFD700" />
  70. </LinearLayout>
  71.  
  72. </LinearLayout>

ProcessInfo.java

  1. package com.qin.ammp;
  2.  
  3. //Model类
  4. public class ProcessInfo {
  5.  
  6. // 进程id Android规定android.system.uid=1000
  7. private int pid;
  8. // 进程所在的用户id ,即该进程是有谁启动的 root/普通用户等
  9. private int uid;
  10. // 进程占用的内存大小,单位为kb
  11. private int memSize;
  12. // 进程名
  13. private String processName;
  14.  
  15. public ProcessInfo(){}
  16.  
  17. public int getPid() {
  18. return pid;
  19. }
  20.  
  21. public void setPid(int pid) {
  22. this.pid = pid;
  23. }
  24.  
  25. public int getUid() {
  26. return uid;
  27. }
  28.  
  29. public void setUid(int uid) {
  30. this.uid = uid;
  31. }
  32.  
  33. public int getMemSize() {
  34. return memSize;
  35. }
  36.  
  37. public void setMemSize(int memSize) {
  38. this.memSize = memSize;
  39. }
  40.  
  41. public String getProcessName() {
  42. return processName;
  43. }
  44.  
  45. public void setPocessName(String processName) {
  46. this.processName = processName;
  47. }
  48.  
  49. }

MainActivity.java

  1. package com.qin.ammp;
  2.  
  3. import android.app.Activity;
  4. import android.app.ActivityManager;
  5. import android.app.ActivityManager.MemoryInfo;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.os.Bundle;
  9. import android.text.format.Formatter;
  10. import android.util.Log;
  11. import android.view.View;
  12. import android.widget.Button;
  13. import android.widget.TextView;
  14.  
  15. public class MainActivity extends Activity {
  16.  
  17. private static String TAG = "AM_MEMORYIPROCESS" ;
  18.  
  19. private ActivityManager mActivityManager = null ;
  20.  
  21. private TextView tvAvailMem ;
  22. private Button btProcessInfo ;
  23.  
  24. @Override
  25. public void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.main);
  28.  
  29. tvAvailMem = (TextView)findViewById(R.id.tvAvailMemory) ;
  30. btProcessInfo =(Button)findViewById(R.id.btProcessInfo);
  31. //跳转到显示进程信息界面
  32. btProcessInfo.setOnClickListener(new View.OnClickListener() {
  33.  
  34. @Override
  35. public void onClick(View v) {
  36. Intent intent = new Intent(MainActivity.this,BrowseProcessInfoActivity.class);
  37. startActivity(intent);
  38. }
  39. });
  40.  
  41. //获得ActivityManager服务的对象
  42. mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
  43.  
  44. //获得可用内存信息
  45. String availMemStr = getSystemAvaialbeMemorySize();
  46. Log.i(TAG, "The Availabel Memory Size is"+availMemStr);
  47. //显示
  48. tvAvailMem.setText(availMemStr);
  49.  
  50. }
  51. //获得系统可用内存信息
  52. private String getSystemAvaialbeMemorySize(){
  53. //获得MemoryInfo对象
  54. MemoryInfo memoryInfo = new MemoryInfo() ;
  55. //获得系统可用内存,保存在MemoryInfo对象上
  56. mActivityManager.getMemoryInfo(memoryInfo) ;
  57. long memSize = memoryInfo.availMem ;
  58.  
  59. //字符类型转换
  60. String availMemStr = formateFileSize(memSize);
  61.  
  62. return availMemStr ;
  63. }
  64.  
  65. //调用系统函数,字符串转换 long -String KB/MB
  66. private String formateFileSize(long size){
  67. return Formatter.formatFileSize(MainActivity.this, size);
  68. }
  69.  
  70. }

BrowseProcessInfoActivity.java

  1. package com.qin.ammp;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import android.app.Activity;
  6. import android.app.ActivityManager;
  7. import android.app.AlertDialog;
  8. import android.content.Context;
  9. import android.content.DialogInterface;
  10. import android.os.Bundle;
  11. import android.os.Debug;
  12. import android.util.Log;
  13. import android.view.ContextMenu;
  14. import android.view.MenuItem;
  15. import android.view.View;
  16. import android.view.ContextMenu.ContextMenuInfo;
  17. import android.widget.AdapterView;
  18. import android.widget.ListView;
  19. import android.widget.TextView;
  20. import android.widget.AdapterView.OnItemClickListener;
  21.  
  22. public class BrowseProcessInfoActivity extends Activity implements OnItemClickListener{
  23.  
  24. private static String TAG = "ProcessInfo";
  25. private static final int KILL_PORCESS = 1;
  26. private static final int SEARCH_RUNNING_APP = 2;
  27.  
  28. private ActivityManager mActivityManager = null;
  29. // ProcessInfo Model类 用来保存所有进程信息
  30. private List<ProcessInfo> processInfoList = null;
  31.  
  32. private ListView listviewProcess;
  33. private TextView tvTotalProcessNo ;
  34.  
  35. public void onCreate(Bundle savedInstanceState) {
  36. super.onCreate(savedInstanceState);
  37.  
  38. setContentView(R.layout.browse_process_list);
  39.  
  40. listviewProcess = (ListView) findViewById(R.id.listviewProcess);
  41. listviewProcess.setOnItemClickListener(this);
  42.  
  43. tvTotalProcessNo =(TextView)findViewById(R.id.tvTotalProcessNo);
  44.  
  45. this.registerForContextMenu(listviewProcess);
  46. // 获得ActivityManager服务的对象
  47. mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
  48. // 获得系统进程信息
  49. getRunningAppProcessInfo();
  50. // 为ListView构建适配器对象
  51. BrowseProcessInfoAdapter mprocessInfoAdapter = new BrowseProcessInfoAdapter(
  52. this, processInfoList);
  53. listviewProcess.setAdapter(mprocessInfoAdapter);
  54.  
  55. tvTotalProcessNo.setText("当前系统进程共有:"+processInfoList.size());
  56. }
  57. //杀死该进程,并且刷新
  58. @Override
  59. public void onItemClick(AdapterView<?> arg0, View arg1, final int position, long arg3) {
  60. // TODO Auto-generated method stub
  61. new AlertDialog.Builder(this).setMessage("是否杀死该进程")
  62. .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  63.  
  64. @Override
  65. public void onClick(DialogInterface dialog, int which) {
  66. // TODO Auto-generated method stub
  67. //杀死该进程,释放进程占用的空间
  68. mActivityManager.killBackgroundProcesses(processInfoList.get(position).getProcessName());
  69. //刷新界面
  70. getRunningAppProcessInfo() ;
  71. BrowseProcessInfoAdapter mprocessInfoAdapter = new BrowseProcessInfoAdapter(
  72. BrowseProcessInfoActivity.this, processInfoList);
  73. listviewProcess.setAdapter(mprocessInfoAdapter);
  74. tvTotalProcessNo.setText("当前系统进程共有:"+processInfoList.size());
  75.  
  76. }
  77. }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
  78.  
  79. @Override
  80. public void onClick(DialogInterface dialog, int which) {
  81. // TODO Auto-generated method stub
  82. dialog.cancel() ;
  83. }
  84. }).create().show() ;
  85. }
  86.  
  87. /**
  88. * 获得系统进程信息
  89. */
  90. private void getRunningAppProcessInfo() {
  91. // ProcessInfo Model类 用来保存所有进程信息
  92. processInfoList = new ArrayList<ProcessInfo>();
  93.  
  94. // 通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程
  95. List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager
  96. .getRunningAppProcesses();
  97.  
  98. for (ActivityManager.RunningAppProcessInfo appProcessInfo : appProcessList) {
  99. // 进程ID号
  100. int pid = appProcessInfo.pid;
  101. // 用户ID 类似于Linux的权限不同,ID也就不同 比如 root等
  102. int uid = appProcessInfo.uid;
  103. // 进程名,默认是包名或者由属性android:process=""指定
  104. String processName = appProcessInfo.processName;
  105. // 获得该进程占用的内存
  106. int[] myMempid = new int[] { pid };
  107. // 此MemoryInfo位于android.os.Debug.MemoryInfo包中,用来统计进程的内存信息
  108. Debug.MemoryInfo[] memoryInfo = mActivityManager
  109. .getProcessMemoryInfo(myMempid);
  110. // 获取进程占内存用信息 kb单位
  111. int memSize = memoryInfo[0].dalvikPrivateDirty;
  112.  
  113. Log.i(TAG, "processName: " + processName + " pid: " + pid
  114. + " uid:" + uid + " memorySize is -->" + memSize + "kb");
  115. // 构造一个ProcessInfo对象
  116. ProcessInfo processInfo = new ProcessInfo();
  117. processInfo.setPid(pid);
  118. processInfo.setUid(uid);
  119. processInfo.setMemSize(memSize);
  120. processInfo.setPocessName(processName);
  121. processInfoList.add(processInfo);
  122.  
  123. // 获得每个进程里运行的应用程序(包),即每个应用程序的包名
  124. String[] packageList = appProcessInfo.pkgList;
  125. Log.i(TAG, "process id is " + pid + "has " + packageList.length);
  126. for (String pkg : packageList) {
  127. Log.i(TAG, "packageName " + pkg + " in process id is -->"
  128. + pid);
  129. }
  130. }
  131. }
  132.  
  133. public void onCreateContextMenu(ContextMenu menu, View v,
  134. ContextMenuInfo menuInfo) {
  135. menu.add(0, 0, KILL_PORCESS, "杀死该进程");
  136. menu.add(0, 0, SEARCH_RUNNING_APP, "运行在该进程的应用程序");
  137. super.onCreateContextMenu(menu, v, menuInfo);
  138.  
  139. }
  140.  
  141. public boolean onContextItemSelected(MenuItem item) {
  142. switch (item.getItemId()) {
  143. case KILL_PORCESS: // 杀死该进程 , 重新加载界面
  144. new AlertDialog.Builder(this).setMessage("是否杀死该进程")
  145. .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  146.  
  147. @Override
  148. public void onClick(DialogInterface dialog, int which) {
  149. // TODO Auto-generated method stub
  150.  
  151. }
  152. }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
  153.  
  154. @Override
  155. public void onClick(DialogInterface dialog, int which) {
  156. // TODO Auto-generated method stub
  157. dialog.cancel() ;
  158. }
  159. }).create().show() ;
  160. break;
  161. case SEARCH_RUNNING_APP: // 查看运行在该进程的应用程序信息
  162. break;
  163. default:
  164. break;
  165. }
  166. return super.onContextItemSelected(item);
  167. }
  168.  
  169. }

BrowseProcessInfoAdapter.java

  1. package com.qin.ammp;
  2.  
  3. import java.util.List;
  4. import android.content.Context;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.BaseAdapter;
  9. import android.widget.TextView;
  10.  
  11. //自定义适配器类,提供给listView的自定义view
  12. public class BrowseProcessInfoAdapter extends BaseAdapter {
  13.  
  14. private List<ProcessInfo> mlistProcessInfo = null;
  15.  
  16. LayoutInflater infater = null;
  17.  
  18. public BrowseProcessInfoAdapter(Context context, List<ProcessInfo> apps) {
  19. infater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  20. mlistProcessInfo = apps ;
  21. }
  22. @Override
  23. public int getCount() {
  24. System.out.println("size" + mlistProcessInfo.size());
  25. return mlistProcessInfo.size();
  26. }
  27. @Override
  28. public Object getItem(int position) {
  29. return mlistProcessInfo.get(position);
  30. }
  31.  
  32. @Override
  33. public long getItemId(int position) {
  34. return 0;
  35. }
  36. @Override
  37. public View getView(int position, View convertview, ViewGroup arg2) {
  38. System.out.println("getView at " + position);
  39. View view = null;
  40. ViewHolder holder = null;
  41. if (convertview == null || convertview.getTag() == null) {
  42. view = infater.inflate(R.layout.browse_process_item, null);
  43. holder = new ViewHolder(view);
  44. view.setTag(holder);
  45. }
  46. else{
  47. view = convertview ;
  48. holder = (ViewHolder) convertview.getTag() ;
  49. }
  50. ProcessInfo processInfo = (ProcessInfo) getItem(position);
  51. holder.tvPID.setText(processInfo.getPid() +"");
  52. holder.tvUID.setText(processInfo.getUid() +"") ;
  53. holder.tvProcessMemSize.setText(processInfo.getMemSize()+"KB");
  54. holder.tvProcessName.setText(processInfo.getProcessName());
  55.  
  56. return view;
  57. }
  58.  
  59. class ViewHolder {
  60. TextView tvPID ; //进程ID
  61. TextView tvUID ; //用户ID
  62. TextView tvProcessMemSize ; //进程占用内存大小
  63. TextView tvProcessName ; // 进程名
  64. public ViewHolder(View view) {
  65. this.tvPID = (TextView)view.findViewById(R.id.tvProcessPID) ;
  66. this.tvUID = (TextView) view.findViewById(R.id.tvProcessUID);
  67. this.tvProcessMemSize = (TextView) view.findViewById(R.id.tvProcessMemSize);
  68. this.tvProcessName = (TextView)view.findViewById(R.id.tvProcessName) ;
  69. }
  70. }
  71.  
  72. }

AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.qin.ammp"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">
  7. <activity android:name=".MainActivity"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. <activity android:name=".BrowseProcessInfoActivity"></activity>
  15. </application>
  16.  
  17. <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
  18.  
  19. </manifest>

显示所有APP的进程详细信息(进程ID、进程所在UID、进程占用内存、进程名)的更多相关文章

  1. Linux 查找指定名称的进程并显示进程详细信息

    实际应用中可能有这样的场景:给定一个进程名称特征串,查找所有匹配该进程名称的进程的详细信息. 解决的办法是: (1) 先用pgrep [str] 命令进行模糊匹配,找到匹配该特征串的进程ID: (2) ...

  2. linux下查看运行进程详细信息

    通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等.这时,我们需要通过以下的方法来查看进程的详细信息: Linux在启动一个进程时,系统会在/proc下创建一个 ...

  3. linux 查看运行进程详细信息

    Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息 通过ll或ls –l命令即可查看. ll /proc/PID cwd符号链接的是进程运行 ...

  4. linux根据进程pid查看进程详细信息

    http://note.youdao.com/noteshare?id=af2fdd34e3adfacda2d34706e16e5045

  5. 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 ...

  6. Linux 进程资源用量监控和按用户设置进程限制

    每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工作的方 ...

  7. struts2:上传多个文件时实现带进度条、进度详细信息的示范

    上一篇文章讲了上传单个文件与上传多个文件(属性驱动)的例子.本例是上传多个文件(属性驱动),并且显示进度条.进度详细信息的示范. 在文件上传选择界面,允许用户增加.删除选择的文件,且只能上传指定类型的 ...

  8. 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)

    不过必须XP SP3以上才行.所有API大全: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).a ...

  9. 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?

    1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...

随机推荐

  1. Cacti监控mysql数据库服务器实现过程

    Cacti监控mysql数据库服务器实现过程 2014-05-29      0个评论    来源:Cacti监控mysql数据库服务器实现过程   收藏    我要投稿 1 先在cacti服务器端安 ...

  2. 前端纯css 图片的模糊处理

    最近做的一个项目需要用到背景图的模糊处理,在网上查资料,发现用css的 filter 属性就可以解决,但是因为模糊度比较高,四周会有很长的模糊边,百度上也没找到解决的方法,,可喜的是最后我在分析一个d ...

  3. ssl证书文件

    证书(Certificate) - *.cer *.crt私钥(Private Key) - *.key证书签名请求(Certificate signing request) - *.csr 至于pe ...

  4. springMVC中实现用户登录权限验证

    通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor ...

  5. RSAProtectedConfigurationProvider加密web.config

    上一篇文章介绍了用 DataProtectionConfigurationProvider加密web.config文件的方法,不过他有一个缺陷,加密的文件只有在本机才能解密,如果有多台服务器的话,则需 ...

  6. 171. Anagrams【medium】

    Given an array of strings, return all groups of strings that are anagrams. Notice All inputs will be ...

  7. 关于Tensorflow 的数据读取环节

    Tensorflow读取数据的一般方式有下面3种: preloaded直接创建变量:在tensorflow定义图的过程中,创建常量或变量来存储数据 feed:在运行程序时,通过feed_dict传入数 ...

  8. Linux下出现Read-only file system的解决办法

    正常运行中的网站,忽然间出现session目录不可写,连接服务器一看,任何关于写硬盘的命令都不能用,提示Read-only file system,使用一条命令即可搞定此问题: mount -o re ...

  9. 关于EasyUI的Layout总结

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.layout以html标签方式建立的 <div id="content" region="center&q ...

  10. 数据库设计(四)数据库的规范化(Normalization)

    数据库的规范化 Database Normalization is a technique of organizing the data in the database. Normalization ...