android中进程管理

来源:互联网 发布:分析软件 编辑:程序博客网 时间:2024/06/09 15:15

android中进程管理

  • 1.进程也是通过ActivityManager来获取的,通过调用getRunningAppProcesses方法,就可以获取到正在运行的进程列表.
  • 2.遍历整个进程列表,我们可以获取进程的信息RunningAppProcessInfo info,我们可以直接通过进程信息对象的成员变量获取其中的信息,代码如下:

    info.processName //当前进程的应用包名info.pid  //进程id号
  • 3.通过进程的id号,我们就可以获取进程的内存占用等信息,当然我们需要一个PackageManager对象,代码如下:

    PackageManager pm = ctx.getPackageManager();int[] pids = new int[]{info.pid};//根据进程id获取memInfo,传递几个id就会给几个memoryInfoMemoryInfo[] memInfo = am.getProcessMemoryInfo(pids );memInfo[0].getTotalPrivateDirty();//获取当前进程"弄脏的"占用的内存数,该方法返回的内存大小是以KB为单位的
  • 4.通过包管理器和相应的包名我们又可以获取到应用程序的信息,代码如下:
    Drawable icon = pm.getApplicationIcon(packageName);//获取当前进程的Icon
    ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
    String appName = appInfo.loadLabel(pm).toString();//进程名称
    if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM)!=0){//通过应用的flags值与系统flag按位相与可以知道当前应用是否为系统应用
    taskInfo.setSysProc(true);//系统进程
    }else{
    taskInfo.setSysProc(false);//用户进程
    }
    • 通过判断应用程序是否是系统应用,来判断当前进程是否为系统进程
  • 5.当然这其中会有一些小问题,由于某些进程应用是使用C语言写的,我们无法获取到应用的图标,也无法获取到当前应用的应用名称,我们只能使用包名代替应用名称,而图标我们自己定义一个特定的图标即可.处理代码如下:

    taskInfo.setIcon(ctx.getResources().getDrawable(R.drawable.ic_launcher));taskInfo.setAppName(packageName);taskInfo.setSysProc(true);//我们一般将C语言程序定义为系统程序
  • 6.如何清理进程
    • 只需要使用ActivityManager的杀死后台进程的方法即可,代码如下:
      am.killBackgroundProcesses(taskInfo.getPackageName());
    • 该方法只能清理掉后台进程,前台前台进程/可见进程/系统进程是无法清理的,但是为了用户能有一个更好的体验,我们不得不将用户点击的所有进程全部”清理掉”(从显示列表中移除)
    • 当然我们还可以完成锁屏自动清理,这时我们就需要开启服务,并在服务中注册一个屏幕锁定的广播接收者,当收到锁屏广播时清理进程.
    • 隐藏系统进程也是一个不错的方法,实现起来也更为方便,只需要在显示的ListView的Adapter的getCount方法中返回用户进程的数量就可以了.**
2 0
原创粉丝点击