ActivityManager浅析及工具类

ActivityManager是Android框架的一个重要部分,它负责一新ActivityThread进程创建,Activity生命周期的维护,是与系统所有正在运行着的Acitivity进行交互,ActivityManager作为Activity管理者这么个角色,起着比较重要的作用。通过ActivityManager我们可以获得系统里正在运行的Activities,包括进程信息、应用程序包信息、服务信息(Service)及任务信息(Task)等。

静态内部类

  • ActivityManager.MemoryInfo: 系统可用内存信息
    MemoryInfo中重要的字段:
    availMem(系统可用内存)
    totalMem(总内存)
    threshold(低内存阈值,即低内存的临界线)
    lowMemory(是否为低内存状态)

  • ActivityManager.RunningAppProcessInfo: 正在运行的进程信息
    相关字段:
    processName(进程名)
    pid(进程pid)
    uid(进程uid)
    pkgList(该进程下所有的包)

  • ActivityManager.RunningServiceInfo: 正在运行的服务信息
    其中除了服务进程信息外还有一些其它信息,相关字段:
    activeSince(第一次被激活的时间、方式)
    foreground(服务是否在后台执行)。

  • ActivityManager.RunningTaskInfo: 正在运行的任务信息
    相关字段:
    id(该任务的唯一标识)
    baseActivity(该任务栈的基础Activity)
    topActivity(该任务栈栈顶的Activity)
    numActivities(该任务栈中Activity数量)
    description(任务当前状态描述)

常用工具类方法

1.判断应用是否在前台运行

public boolean isRunningForeground(Context context){
   String packageName=getPackageName(context);
    String topActivityClassName=getTopActivityName(context);
    
    if (packageName!=null&&topActivityClassName!=null&&topActivityClassName.startsWith(packageName)) {
        System.out.println("应用在前台执行");
        return true;
    } else {
        System.out.println("应用在后台执行");
        return false;
    }
}

2.判断应用是否在运行

public boolean isRun(Context context,String mPackageName){
    ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> list = am.getRunningTasks(100);
    boolean isAppRunning = false;
    //100表示取的最大的任务数,info.topActivity表示当前正在运行的Activity,info.baseActivity表示系统后台有此进程在运行
    for (RunningTaskInfo info : list) {
        if (info.topActivity.getPackageName().equals(mPackageName) || info.baseActivity.getPackageName().equals(mPackageName)) {
            isAppRunning = true;
            Log.i("ActivityService",info.topActivity.getPackageName() + " info.baseActivity.getPackageName()="+info.baseActivity.getPackageName());
            break;
        }
    }
    if(isAppRunning){
        Log.i("ActivityService", "该程序正在运行");
    }else{
        Log.i("ActivityService", "该程序没有运行");
    }
    return isAppRunning;
}

3.获取栈顶ActivityName

public  String getTopActivityName(Context context){
    String topActivityClassName=null;
     ActivityManager activityManager =
    (ActivityManager)(context.getSystemService(android.content.Context.ACTIVITY_SERVICE )) ;
     List<runningtaskinfo> runningTaskInfos = activityManager.getRunningTasks(1) ;
     if(runningTaskInfos != null){
         ComponentName f=runningTaskInfos.get(0).topActivity;
         topActivityClassName=f.getClassName();
     }
     return topActivityClassName;
}

public String getPackageName(Context context){
     String packageName = context.getPackageName();  
     return packageName;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值