- 浏览: 1161591 次
文章分类
最新评论
-
dukunpeng22:
想问楼主,关于实时通讯,Socket是最方便的吗,这个东西在客 ...
android 聊天室 -
greatwqs:
想问一下楼主的HBase版本是多少呢?
我这边用的是hbas ...
HTablePool的实现分析 -
fengpengfei8910:
兄弟 不知道你做出来没
通过WebView实现页面与ANDRIOD客户端的交互 -
guji528:
正在找Python调试程序,改天试试FWTools了
Eclipse中调试Python代码--调试FWTools2.4.7中的gdal_retile.py -
guji528:
要增加对 Python 交互式执行的支持,可通过Run > ...
PyDev
Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
转载请注明出处:http://blog.csdn.net/qinjuning
本节内容主要是讲解ActivityManager的使用,通过ActivityManager我们可以获得系统里正在运行的activities,包括
进程(Process)等、应用程序/包、服务(Service)、任务(Task)信息。
计划如下:
第一部分:获取系统可用内存以及所有的正在运行的进程信息 ;
第二部分:获取每个进程里运行的应用程序信息和所有正在运行的应用程序
第三部分:获取正在运行的服务和任务信息。
每部分都准备了相应的Demo,助您更深的理解.
知识准备:Android 应用程序模块:应用、任务、进程的知识介绍:
1一个android 包(简称.apk) :里面包含应用程序的代码以及资源。这是一个应用发布,用户能下载并安装他们
设备上的文件。
2 一个任务:通常用户能当它为一个“应用程序”来启动:通常在桌面上会有一个图标可以来启动任务,这是一个
上层的应用,可以将你的任务切换到前台来。
3 一个进程:是一个底层的代码运行级别的核心进程。通常.apk包里所有代码运行在一个进程里,一个进程对于
一个.apk包;然而,进程标签常用来改变代码运行的位置,可以是全部的.apk包或者是独立的活动,接收器,服务, 或者
提供器组件。
进程
在Android中,进程是应用程序的完整实现,而不是用户通常了解的那样。他们主要用途很简单:
1、提高稳定性和安全性,将不信任或者不稳定的代码移动到其他进程。
2、可将多个.apk包运行在同一个进程里减少系统开销。
3、帮助系统管理资源,将重要的代码放在一个单独的进程里,这样就可以单独销毁应用程序的其他部分。
于是,为了完成某一任务或者减少系统资源的开销,一个进程里可以运行一个或多个应用程序。
更多知识点获取,请访问:《Android 应用程序模块: 应用, 任务, 进程, 和线程》
ActivityManager 类:
获取方法ActivityManager mActivityManager (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
常用的静态内部类如下(下面具体介绍):
ActivityManager.MemoryInfo: 系统可用内存信息
ActivityManager.RecentTaskInfo: 最近的任务信息
ActivityManager.RunningAppProcessInfo: 正在运行的进程信息
ActivityManager.RunningServiceInfo: 正在运行的服务信息
ActivityManager.RunningTaskInfo: 正在运行的任务信息
常用方法:
public voidgetMemoryInfo(ActivityManager.MemoryInfo outInfo)
说明:获取系统可用内存信息,数据封装在outInfo对象上
public Debug.MemoryInfogetProcessMemoryInfo(int[ ] pids
说明:获取每个进程ID(集合)占用的内存大小(集合), pid和MemoryInfo是一一对应的。
参数: pids 进程ID的集合
PS :我们可以通过调用Debug.MemoryInfo 的dalvikPrivateDirty字段获取进程占用的内存大小(单位为KB)
public List<ActivityManager.RunningAppProcessInfo>getRunningAppProcess()
说明: 获取系统里正在运行的进程
publicList<ActivityManager.RunningServiceInfo>getRunningServices(int maxNum)
说明: 获取系统里所有正在运行的服务
参数:可能服务的最大值(赋予一常数即可,20、50都OK)
publicList<ActivityManager.RunningTaskInfoo>getRunningTasks(int maxNum)
说明:获取系统里正在运行的服务
参数: 同上
publicList<ActivityManager.RecentTaskInfo>getRecentTasks(int maxNum, int flags)
说明:获取系统里最近启动的任务
参数: 同上,flags一般为0即可
public voidkillBackgroundProcess(String packageName)
说明:立即杀掉给定包名的进程,释放进程占用的资源(内存等),如果需要,系统会再次重新启动该进程。系统
PS:系统进程是杀不死的,只能杀死用户进程。但我没有找到好的方法辨别系统进程还是用户进程。但可以肯定的是,
能够杀死的一定是用户进程。
public void restartPackage(String packageName)
说明:该方法已弃用,等同于killBackgroundProcess 。
ActivityManager.MemoryInfo类
常用字段:
longavailMem系统可用内存
longthreshold系统内存不足的阀值,即临界值
boolean lowMemory 如果当前可用内存<=threshold,该值为真
ActivityManager.RunningAppProcessInfo类
常用字段:
int pid 进程ID
int uid 进程所在的用户ID
String processName 进程名,默认是包名或者由android:process=””属性指定
String [ ] pkgList运行在该进程下的所有应用程序包名
对ActivityManager.RecentTaskInfo、ActivityManager.RunningServiceInfo、ActivityManager.RunningTaskInfo
类的介绍留在后文介绍。
DEMO说明:
我们通过ActivityManager获取了系统的可用内存信息以及正在运行在系统里的进程具体信息,当然你也可以选择
手动杀死这些进程,不过前提是用户进程,因为系统进程是杀不死的。
模拟器上的截图如下:
资源文件什么的就不再贴代码了,直接列出逻辑文件。
获取系统可用内存的代码:MainActivity.java
- packagecom.qin.ammp;
- importjava.util.ArrayList;
- importjava.util.List;
- importandroid.app.Activity;
- importandroid.app.ActivityManager;
- importandroid.app.ActivityManager.MemoryInfo;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.os.Bundle;
- importandroid.os.Debug;
- importandroid.text.format.Formatter;
- importandroid.util.Log;
- importandroid.view.View;
- importandroid.widget.Button;
- importandroid.widget.TextView;
- publicclassMainActivityextendsActivity{
- privatestaticStringTAG="AM_MEMORYIPROCESS";
- privateActivityManagermActivityManager=null;
- privateTextViewtvAvailMem;
- privateButtonbtProcessInfo;
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- tvAvailMem=(TextView)findViewById(R.id.tvAvailMemory);
- btProcessInfo=(Button)findViewById(R.id.btProcessInfo);
- //跳转到显示进程信息界面
- btProcessInfo.setOnClickListener(newView.OnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- Intentintent=newIntent(MainActivity.this,BrowseProcessInfoActivity.class);
- startActivity(intent);
- }
- });
- //获得ActivityManager服务的对象
- mActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
- //获得可用内存信息
- StringavailMemStr=getSystemAvaialbeMemorySize();
- Log.i(TAG,"TheAvailabelMemorySizeis"+availMemStr);
- //显示
- tvAvailMem.setText(availMemStr);
- }
- //获得系统可用内存信息
- privateStringgetSystemAvaialbeMemorySize(){
- //获得MemoryInfo对象
- MemoryInfomemoryInfo=newMemoryInfo();
- //获得系统可用内存,保存在MemoryInfo对象上
- mActivityManager.getMemoryInfo(memoryInfo);
- longmemSize=memoryInfo.availMem;
- //字符类型转换
- StringavailMemStr=formateFileSize(memSize);
- returnavailMemStr;
- }
- //调用系统函数,字符串转换long-StringKB/MB
- privateStringformateFileSize(longsize){
- returnFormatter.formatFileSize(MainActivity.this,size);
- }
- }
获取系统进程信息的代码:BrowseProcessInfoActivity .java
- packagecom.qin.ammp;
- importjava.util.ArrayList;
- importjava.util.List;
- importandroid.app.Activity;
- importandroid.app.ActivityManager;
- importandroid.app.AlertDialog;
- importandroid.app.Dialog;
- importandroid.content.Context;
- importandroid.content.DialogInterface;
- importandroid.os.Bundle;
- importandroid.os.Debug;
- importandroid.util.Log;
- importandroid.view.ContextMenu;
- importandroid.view.Menu;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.view.ContextMenu.ContextMenuInfo;
- importandroid.widget.AdapterView;
- importandroid.widget.ListView;
- importandroid.widget.TextView;
- importandroid.widget.AdapterView.OnItemClickListener;
- publicclassBrowseProcessInfoActivityextendsActivityimplementsOnItemClickListener{
- privatestaticStringTAG="ProcessInfo";
- privatestaticfinalintKILL_PORCESS=1;
- privatestaticfinalintSEARCH_RUNNING_APP=2;
- privateActivityManagermActivityManager=null;
- //ProcessInfoModel类用来保存所有进程信息
- privateList<ProcessInfo>processInfoList=null;
- privateListViewlistviewProcess;
- privateTextViewtvTotalProcessNo;
- publicvoidonCreate(BundlesavedInstanceState){
- 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构建适配器对象
- BrowseProcessInfoAdaptermprocessInfoAdapter=newBrowseProcessInfoAdapter(
- this,processInfoList);
- listviewProcess.setAdapter(mprocessInfoAdapter);
- tvTotalProcessNo.setText("当前系统进程共有:"+processInfoList.size());
- }
- //杀死该进程,并且刷新
- @Override
- publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,finalintposition,longarg3){
- //TODOAuto-generatedmethodstub
- newAlertDialog.Builder(this).setMessage("是否杀死该进程")
- .setPositiveButton("确定",newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- //杀死该进程,释放进程占用的空间
- mActivityManager.killBackgroundProcesses(processInfoList.get(position).getProcessName());
- //刷新界面
- getRunningAppProcessInfo();
- BrowseProcessInfoAdaptermprocessInfoAdapter=newBrowseProcessInfoAdapter(
- BrowseProcessInfoActivity.this,processInfoList);
- listviewProcess.setAdapter(mprocessInfoAdapter);
- tvTotalProcessNo.setText("当前系统进程共有:"+processInfoList.size());
- }
- }).setNegativeButton("取消",newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- dialog.cancel();
- }
- }).create().show();
- }
- //获得系统进程信息
- privatevoidgetRunningAppProcessInfo(){
- //ProcessInfoModel类用来保存所有进程信息
- processInfoList=newArrayList<ProcessInfo>();
- //通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程
- List<ActivityManager.RunningAppProcessInfo>appProcessList=mActivityManager
- .getRunningAppProcesses();
- for(ActivityManager.RunningAppProcessInfoappProcessInfo:appProcessList){
- //进程ID号
- intpid=appProcessInfo.pid;
- //用户ID类似于Linux的权限不同,ID也就不同比如root等
- intuid=appProcessInfo.uid;
- //进程名,默认是包名或者由属性android:process=""指定
- StringprocessName=appProcessInfo.processName;
- //获得该进程占用的内存
- int[]myMempid=newint[]{pid};
- //此MemoryInfo位于android.os.Debug.MemoryInfo包中,用来统计进程的内存信息
- Debug.MemoryInfo[]memoryInfo=mActivityManager
- .getProcessMemoryInfo(myMempid);
- //获取进程占内存用信息kb单位
- intmemSize=memoryInfo[0].dalvikPrivateDirty;
- Log.i(TAG,"processName:"+processName+"pid:"+pid
- +"uid:"+uid+"memorySizeis-->"+memSize+"kb");
- //构造一个ProcessInfo对象
- ProcessInfoprocessInfo=newProcessInfo();
- processInfo.setPid(pid);
- processInfo.setUid(uid);
- processInfo.setMemSize(memSize);
- processInfo.setPocessName(processName);
- processInfoList.add(processInfo);
- //获得每个进程里运行的应用程序(包),即每个应用程序的包名
- String[]packageList=appProcessInfo.pkgList;
- Log.i(TAG,"processidis"+pid+"has"+packageList.length);
- for(Stringpkg:packageList){
- Log.i(TAG,"packageName"+pkg+"inprocessidis-->"+pid);
- }
- }
- }
- publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
- ContextMenuInfomenuInfo){
- menu.add(0,0,KILL_PORCESS,"杀死该进程");
- menu.add(0,0,SEARCH_RUNNING_APP,"运行在该进程的应用程序");
- super.onCreateContextMenu(menu,v,menuInfo);
- }
- publicbooleanonContextItemSelected(MenuItemitem){
- switch(item.getItemId()){
- caseKILL_PORCESS://杀死该进程,重新加载界面
- newAlertDialog.Builder(this).setMessage("是否杀死该进程")
- .setPositiveButton("确定",newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- }
- }).setNegativeButton("取消",newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- dialog.cancel();
- }
- }).create().show();
- break;
- caseSEARCH_RUNNING_APP://查看运行在该进程的应用程序信息
- break;
- default:
- break;
- }
- returnsuper.onContextItemSelected(item);
- }
- }
我们可以通过进程占用内存大小来进而获取占用cpu大小,直接换算还是很简单的。
源代码地址:http://download.csdn.net/detail/qinjuning/3803314
转载请注明出处:http://blog.csdn.net/qinjuning
本节内容主要是讲解ActivityManager的使用,通过ActivityManager我们可以获得系统里正在运行的activities,包括
进程(Process)等、应用程序/包、服务(Service)、任务(Task)信息。
计划如下:
第一部分:获取系统可用内存以及所有的正在运行的进程信息 ;
第二部分:获取每个进程里运行的应用程序信息和所有正在运行的应用程序
第三部分:获取正在运行的服务和任务信息。
每部分都准备了相应的Demo,助您更深的理解.
知识准备:Android 应用程序模块:应用、任务、进程的知识介绍:
1一个android 包(简称.apk) :里面包含应用程序的代码以及资源。这是一个应用发布,用户能下载并安装他们
设备上的文件。
2 一个任务:通常用户能当它为一个“应用程序”来启动:通常在桌面上会有一个图标可以来启动任务,这是一个
上层的应用,可以将你的任务切换到前台来。
3 一个进程:是一个底层的代码运行级别的核心进程。通常.apk包里所有代码运行在一个进程里,一个进程对于
一个.apk包;然而,进程标签常用来改变代码运行的位置,可以是全部的.apk包或者是独立的活动,接收器,服务, 或者
提供器组件。
进程
在Android中,进程是应用程序的完整实现,而不是用户通常了解的那样。他们主要用途很简单:
1、提高稳定性和安全性,将不信任或者不稳定的代码移动到其他进程。
2、可将多个.apk包运行在同一个进程里减少系统开销。
3、帮助系统管理资源,将重要的代码放在一个单独的进程里,这样就可以单独销毁应用程序的其他部分。
于是,为了完成某一任务或者减少系统资源的开销,一个进程里可以运行一个或多个应用程序。
更多知识点获取,请访问:《Android 应用程序模块: 应用, 任务, 进程, 和线程》
ActivityManager 类:
获取方法ActivityManager mActivityManager (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
常用的静态内部类如下(下面具体介绍):
ActivityManager.MemoryInfo: 系统可用内存信息
ActivityManager.RecentTaskInfo: 最近的任务信息
ActivityManager.RunningAppProcessInfo: 正在运行的进程信息
ActivityManager.RunningServiceInfo: 正在运行的服务信息
ActivityManager.RunningTaskInfo: 正在运行的任务信息
常用方法:
public voidgetMemoryInfo(ActivityManager.MemoryInfo outInfo)
说明:获取系统可用内存信息,数据封装在outInfo对象上
public Debug.MemoryInfogetProcessMemoryInfo(int[ ] pids
说明:获取每个进程ID(集合)占用的内存大小(集合), pid和MemoryInfo是一一对应的。
参数: pids 进程ID的集合
PS :我们可以通过调用Debug.MemoryInfo 的dalvikPrivateDirty字段获取进程占用的内存大小(单位为KB)
public List<ActivityManager.RunningAppProcessInfo>getRunningAppProcess()
说明: 获取系统里正在运行的进程
publicList<ActivityManager.RunningServiceInfo>getRunningServices(int maxNum)
说明: 获取系统里所有正在运行的服务
参数:可能服务的最大值(赋予一常数即可,20、50都OK)
publicList<ActivityManager.RunningTaskInfoo>getRunningTasks(int maxNum)
说明:获取系统里正在运行的服务
参数: 同上
publicList<ActivityManager.RecentTaskInfo>getRecentTasks(int maxNum, int flags)
说明:获取系统里最近启动的任务
参数: 同上,flags一般为0即可
public voidkillBackgroundProcess(String packageName)
说明:立即杀掉给定包名的进程,释放进程占用的资源(内存等),如果需要,系统会再次重新启动该进程。系统
PS:系统进程是杀不死的,只能杀死用户进程。但我没有找到好的方法辨别系统进程还是用户进程。但可以肯定的是,
能够杀死的一定是用户进程。
public void restartPackage(String packageName)
说明:该方法已弃用,等同于killBackgroundProcess 。
ActivityManager.MemoryInfo类
常用字段:
longavailMem系统可用内存
longthreshold系统内存不足的阀值,即临界值
boolean lowMemory 如果当前可用内存<=threshold,该值为真
ActivityManager.RunningAppProcessInfo类
常用字段:
int pid 进程ID
int uid 进程所在的用户ID
String processName 进程名,默认是包名或者由android:process=””属性指定
String [ ] pkgList运行在该进程下的所有应用程序包名
对ActivityManager.RecentTaskInfo、ActivityManager.RunningServiceInfo、ActivityManager.RunningTaskInfo
类的介绍留在后文介绍。
DEMO说明:
我们通过ActivityManager获取了系统的可用内存信息以及正在运行在系统里的进程具体信息,当然你也可以选择
手动杀死这些进程,不过前提是用户进程,因为系统进程是杀不死的。
模拟器上的截图如下:
资源文件什么的就不再贴代码了,直接列出逻辑文件。
获取系统可用内存的代码:MainActivity.java
- packagecom.qin.ammp;
- importjava.util.ArrayList;
- importjava.util.List;
- importandroid.app.Activity;
- importandroid.app.ActivityManager;
- importandroid.app.ActivityManager.MemoryInfo;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.os.Bundle;
- importandroid.os.Debug;
- importandroid.text.format.Formatter;
- importandroid.util.Log;
- importandroid.view.View;
- importandroid.widget.Button;
- importandroid.widget.TextView;
- publicclassMainActivityextendsActivity{
- privatestaticStringTAG="AM_MEMORYIPROCESS";
- privateActivityManagermActivityManager=null;
- privateTextViewtvAvailMem;
- privateButtonbtProcessInfo;
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- tvAvailMem=(TextView)findViewById(R.id.tvAvailMemory);
- btProcessInfo=(Button)findViewById(R.id.btProcessInfo);
- //跳转到显示进程信息界面
- btProcessInfo.setOnClickListener(newView.OnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- Intentintent=newIntent(MainActivity.this,BrowseProcessInfoActivity.class);
- startActivity(intent);
- }
- });
- //获得ActivityManager服务的对象
- mActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
- //获得可用内存信息
- StringavailMemStr=getSystemAvaialbeMemorySize();
- Log.i(TAG,"TheAvailabelMemorySizeis"+availMemStr);
- //显示
- tvAvailMem.setText(availMemStr);
- }
- //获得系统可用内存信息
- privateStringgetSystemAvaialbeMemorySize(){
- //获得MemoryInfo对象
- MemoryInfomemoryInfo=newMemoryInfo();
- //获得系统可用内存,保存在MemoryInfo对象上
- mActivityManager.getMemoryInfo(memoryInfo);
- longmemSize=memoryInfo.availMem;
- //字符类型转换
- StringavailMemStr=formateFileSize(memSize);
- returnavailMemStr;
- }
- //调用系统函数,字符串转换long-StringKB/MB
- privateStringformateFileSize(longsize){
- returnFormatter.formatFileSize(MainActivity.this,size);
- }
- }
获取系统进程信息的代码:BrowseProcessInfoActivity .java
- packagecom.qin.ammp;
- importjava.util.ArrayList;
- importjava.util.List;
- importandroid.app.Activity;
- importandroid.app.ActivityManager;
- importandroid.app.AlertDialog;
- importandroid.app.Dialog;
- importandroid.content.Context;
- importandroid.content.DialogInterface;
- importandroid.os.Bundle;
- importandroid.os.Debug;
- importandroid.util.Log;
- importandroid.view.ContextMenu;
- importandroid.view.Menu;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.view.ContextMenu.ContextMenuInfo;
- importandroid.widget.AdapterView;
- importandroid.widget.ListView;
- importandroid.widget.TextView;
- importandroid.widget.AdapterView.OnItemClickListener;
- publicclassBrowseProcessInfoActivityextendsActivityimplementsOnItemClickListener{
- privatestaticStringTAG="ProcessInfo";
- privatestaticfinalintKILL_PORCESS=1;
- privatestaticfinalintSEARCH_RUNNING_APP=2;
- privateActivityManagermActivityManager=null;
- //ProcessInfoModel类用来保存所有进程信息
- privateList<ProcessInfo>processInfoList=null;
- privateListViewlistviewProcess;
- privateTextViewtvTotalProcessNo;
- publicvoidonCreate(BundlesavedInstanceState){
- 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构建适配器对象
- BrowseProcessInfoAdaptermprocessInfoAdapter=newBrowseProcessInfoAdapter(
- this,processInfoList);
- listviewProcess.setAdapter(mprocessInfoAdapter);
- tvTotalProcessNo.setText("当前系统进程共有:"+processInfoList.size());
- }
- //杀死该进程,并且刷新
- @Override
- publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,finalintposition,longarg3){
- //TODOAuto-generatedmethodstub
- newAlertDialog.Builder(this).setMessage("是否杀死该进程")
- .setPositiveButton("确定",newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- //杀死该进程,释放进程占用的空间
- mActivityManager.killBackgroundProcesses(processInfoList.get(position).getProcessName());
- //刷新界面
- getRunningAppProcessInfo();
- BrowseProcessInfoAdaptermprocessInfoAdapter=newBrowseProcessInfoAdapter(
- BrowseProcessInfoActivity.this,processInfoList);
- listviewProcess.setAdapter(mprocessInfoAdapter);
- tvTotalProcessNo.setText("当前系统进程共有:"+processInfoList.size());
- }
- }).setNegativeButton("取消",newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- dialog.cancel();
- }
- }).create().show();
- }
- //获得系统进程信息
- privatevoidgetRunningAppProcessInfo(){
- //ProcessInfoModel类用来保存所有进程信息
- processInfoList=newArrayList<ProcessInfo>();
- //通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程
- List<ActivityManager.RunningAppProcessInfo>appProcessList=mActivityManager
- .getRunningAppProcesses();
- for(ActivityManager.RunningAppProcessInfoappProcessInfo:appProcessList){
- //进程ID号
- intpid=appProcessInfo.pid;
- //用户ID类似于Linux的权限不同,ID也就不同比如root等
- intuid=appProcessInfo.uid;
- //进程名,默认是包名或者由属性android:process=""指定
- StringprocessName=appProcessInfo.processName;
- //获得该进程占用的内存
- int[]myMempid=newint[]{pid};
- //此MemoryInfo位于android.os.Debug.MemoryInfo包中,用来统计进程的内存信息
- Debug.MemoryInfo[]memoryInfo=mActivityManager
- .getProcessMemoryInfo(myMempid);
- //获取进程占内存用信息kb单位
- intmemSize=memoryInfo[0].dalvikPrivateDirty;
- Log.i(TAG,"processName:"+processName+"pid:"+pid
- +"uid:"+uid+"memorySizeis-->"+memSize+"kb");
- //构造一个ProcessInfo对象
- ProcessInfoprocessInfo=newProcessInfo();
- processInfo.setPid(pid);
- processInfo.setUid(uid);
- processInfo.setMemSize(memSize);
- processInfo.setPocessName(processName);
- processInfoList.add(processInfo);
- //获得每个进程里运行的应用程序(包),即每个应用程序的包名
- String[]packageList=appProcessInfo.pkgList;
- Log.i(TAG,"processidis"+pid+"has"+packageList.length);
- for(Stringpkg:packageList){
- Log.i(TAG,"packageName"+pkg+"inprocessidis-->"+pid);
- }
- }
- }
- publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
- ContextMenuInfomenuInfo){
- menu.add(0,0,KILL_PORCESS,"杀死该进程");
- menu.add(0,0,SEARCH_RUNNING_APP,"运行在该进程的应用程序");
- super.onCreateContextMenu(menu,v,menuInfo);
- }
- publicbooleanonContextItemSelected(MenuItemitem){
- switch(item.getItemId()){
- caseKILL_PORCESS://杀死该进程,重新加载界面
- newAlertDialog.Builder(this).setMessage("是否杀死该进程")
- .setPositiveButton("确定",newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- }
- }).setNegativeButton("取消",newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- //TODOAuto-generatedmethodstub
- dialog.cancel();
- }
- }).create().show();
- break;
- caseSEARCH_RUNNING_APP://查看运行在该进程的应用程序信息
- break;
- default:
- break;
- }
- returnsuper.onContextItemSelected(item);
- }
- }
我们可以通过进程占用内存大小来进而获取占用cpu大小,直接换算还是很简单的。
相关推荐
Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
Android中获取正在运行的应用程序-----ActivityManager的使用(二)
Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
Android ActivityManager系统文档分析总结,详细介绍了ActivityManager的各种模式
在Android里,程序内存被分为2部分:native和dalvik,dalvik就是我们普通的Java使用内存,分析堆栈的时候使用的内存。我们创建的对象是在这里面分配的,对于内存的限制是 native+dalvik 不能超过最大限制. Android ...
Android ActivityManager API 对比总结,详细介绍了对比情况
|--系统信息之获取动态内存RAM信息 |--系统信息之获取可用内存 |--系统信息之获得mac地址 |--系统信息之获得手机sim卡序列号 |--缓存优化之几种方案lastModified |--缓存优化之本地缓存优化(超过规定值或SD卡容量...
1.代码获取当前app内存的使用情况 ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); //最大分配内存 int memory = activityManager.getMemoryClass(); System.out....
ActivityManager学习。了解activity运行原理
在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。 这个该如何实现呢? 通过读取文件“/proc/meminfo”的信息能够获取手机Memory的总量,而通过ActivityManager.get...
NULL 博文链接:https://newbin.iteye.com/blog/552144
Android SDK下, 如何在程序中输出日志 以及如何查看日志. 闲话少说,直接进入正题 在程序中输出日志, 使用 android.util.Log 类. 该类提供了若干静态方法 Log.v(String tag, String msg); Log.d(String tag,...
解决getRunningAppProcesses只得到本应用的进程的问题,该工具类非常方便,易于理解,不需要获取任何权限。
而本文将介绍android设备中已启动的服务,并判断某一服务是启动 1.根据ACTIVITY_SERVICE获取系统服务 activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 2.获取系统中正在运行的服务 ...
http://download.csdn.net/detail/yyh352091626/9196107 基于 LeBron_Six 源码修改,先前的代码只能在Android studio上运行,这几天发了点时间移植到eclipse ,只留下了内存清理和缓存清理。其他的都屏蔽了,如果需要...
android实现火箭动画清理内存 文章中主要用到两个类:Animation和ActivityManager
获取系统运行内存(RAM)大小: public static void getRAMTotalMemorySize(final Context context){ //获得ActivityManager服务的对象 ActivityManager mActivityManager = (ActivityManager)context....
直观来说,Binder是Android中的一个类,它继承了IBinder接口 从IPC角度来说,Binder是Android中的一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在Linux中没有 ...