我想知道Android中的进程是否属于用户正在积极控制的应用程序,或者它是否是在没有用户交互的情况下运行的后台服务?
由于我在谈论进程,因此我目前正在尝试从 ActivityManagerService.java 中的进程列表中获取数据。mLruProcesses 包含 ProcessRecords 的列表。那么标志 ProcessRecord.setIsForeground 是确定进程行为(即,前景与背景)的正确标志吗?或者是否有其他地方可以获取此信息。
谢谢
我想知道Android中的进程是否属于用户正在积极控制的应用程序,或者它是否是在没有用户交互的情况下运行的后台服务?
由于我在谈论进程,因此我目前正在尝试从 ActivityManagerService.java 中的进程列表中获取数据。mLruProcesses 包含 ProcessRecords 的列表。那么标志 ProcessRecord.setIsForeground 是确定进程行为(即,前景与背景)的正确标志吗?或者是否有其他地方可以获取此信息。
谢谢
所以在挖掘之后我发现 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);