我试图找出是否有办法区分流程是应用程序还是独立服务(即 - 不是本地服务,而是在自己的流程中运行的服务)。 / p>
我正在使用ActivityManager.getRunningAppProcesses来获取正在运行的应用程序进程,并且还使用ActivityManager.getRunningServices来获取正在运行的服务(不幸的是,不推荐使用getRunningTasks API)。
当我比较两者的结果时,我发现有许多相同的过程名称和两者中的ID(pid)。
我必须假设其进程名称也存在于从RunningAppProcesses派生的列表中的服务,这些服务是驻留在应用程序进程中的本地服务(如果我在这个假设中错了,请告诉我)。 / p>
似乎了解进程是否是独立服务的唯一方法是获取两个列表,然后从服务进程列表中删除其中PID与应用列表中的一个匹配的所有列表。结果将给我独立的服务。
有没有更简单的方法来获取此信息?
答案 0 :(得分:0)
你应该只用ActivityManager.getRunningServices
。这是一个方法,应该告诉您结果中的每个RunningServiceInfo
是否都有自己的进程。 (为了避免每次都获取PackageManager,它也被传入)。
private boolean serviceHasDifferentProcess(PackageManager pm, RunningServiceInfo rsi) throws PackageManager.NameNotFoundException {
ComponentName cn = rsi.service;
String pn = cn.getPackageName();
PackageInfo pi = pm.getPackageInfo(pn, 0);
ApplicationInfo ai = pi.applicationInfo;
String serviceProcessName = rsi.process;
String appProcessName = ai.processName;
return serviceProcessName.equals(appProcessName);
}
答案 1 :(得分:0)
进程可以托管不同的Android组件。在清单中,您告诉Android在哪个进程中放置每个组件。如果您愿意,可以让Android为每个Activity,Service,BroadcastReceiver和ContentProvider创建一个单独的进程。您还可以拥有一个托管某些服务和一些活动的流程,以及另一个托管其他服务和活动的流程。
出于这个原因,你的问题并没有真正得到答案。