0

我想知道Android中的进程是否属于用户正在积极控制的应用程序,或者它是否是在没​​有用户交互的情况下运行的后台服务?

由于我在谈论进程,因此我目前正在尝试从 ActivityManagerService.java 中的进程列表中获取数据。mLruProcesses 包含 ProcessRecords 的列表。那么标志 ProcessRecord.setIsForeground 是确定进程行为(即,前景与背景)的正确标志吗?或者是否有其他地方可以获取此信息。

谢谢

4

1 回答 1

0

所以在挖掘之后我发现 isForeground 不是检查这个的正确位置。相反,我们可以跟踪堆栈中的 topActivity 以将其与进程相关联。如果它们匹配,则该进程属于前台应用程序,否则它是后台。

这个帖子这个帖子也再保证一样。我从该主题发布相同的代码以供参考。

           ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
           // The first in the list of RunningTasks is the foreground task.
           RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
           String foregroundTaskPackageName = foregroundTaskInfo.topActivity.getPackageName();
           Log.i(TAG, "Printing the Top FG activity: " + foregroundTaskPackageName);

           PackageManager pm = mContext.getPackageManager();
           PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
           String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
           Log.i(TAG, "Printing the Top FG App Label: " + foregroundTaskAppName);
于 2014-08-25T20:05:17.173 回答