识别Android上的独立服务

时间:2015-01-22 18:24:47

标签: android android-service

我试图找出是否有办法区分流程是应用程序还是独立服务(即 - 不是本地服务,而是在自己的流程中运行的服务)。 / p>

我正在使用ActivityManager.getRunningAppProcesses来获取正在运行的应用程序进程,并且还使用ActivityManager.getRunningServices来获取正在运行的服务(不幸的是,不推荐使用getRunningTasks API)。

当我比较两者的结果时,我发现有许多相同的过程名称和两者中的ID(pid)。

我必须假设其进程名称也存在于从RunningAppProcesses派生的列表中的服务,这些服务是驻留在应用程序进程中的本地服务(如果我在这个假设中错了,请告诉我)。 / p>

似乎了解进程是否是独立服务的唯一方法是获取两个列表,然后从服务进程列表中删除其中PID与应用列表中的一个匹配的所有列表。结果将给我独立的服务。

有没有更简单的方法来获取此信息?

2 个答案:

答案 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创建一个单独的进程。您还可以拥有一个托管某些服务和一些活动的流程,以及另一个托管其他服务和活动的流程。

出于这个原因,你的问题并没有真正得到答案。