android如何获取前台进程
如何能够获取到前台进程
方案一:无障碍服务
无障碍服务可以监听window窗口焦点的变化,可以注册服务监听。
但是无法实时接收到,有几百毫秒的延时,并且需要用户手动去无障碍服务开启
获取进程列表可及时得到
先看代码
ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = manager.getRunningTasks(3); //需要获取的正在运行的进程数目
if (list != null && !list.isEmpty()) {
for (ActivityManager.RunningTaskInfo info : list) {
if (info.numRunning > 0) { //关键字段numRunning
String packageName = info.topActivity.getPackageName();
break;
}
}
}
关键字段numRunning
官方注释:Number of activities that are currently running (not stopped and persisted) in this task.
表示 用于得到正在运行的activity的数目;
何为正在运行? 即生命周期还未走stop的activity
onstop含义:页面不再可见时则会立即走stop。
finish()函数。当activity调用了finish()之后 destroy并未立即执行,所以还存在该进程中。但是finish()调用之后系统会立即关闭该页面,
于是就会立刻执行stop,然后就被标记为了不再运行的activity。
于是乎,可以用这个numRunnings来判断当前进程有多少个实际运行的activity。
于是乎,可以用这个来判断当前前台是显示的哪个进程。