繁体   English   中英

在Android上识别独立服务

[英]Identifying Stand-Alone Services on Android

我试图找出是否有一种方法可以区分进程是应用程序还是独立服务(即,不是本地服务,而是在自己的进程中运行的服务)。

我正在使用ActivityManager.getRunningAppProcesses来获取正在运行的应用程序进程,也正在使用ActivityManager.getRunningServices来获取正在运行的服务(不幸的是,不赞成使用getRunningTasks API)。

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

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

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

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

您应该只能通过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);
}

进程可以托管不同的Android组件。 在清单中,您告诉Android将每个组件放入哪个进程。 如果需要,您可以让Android为每个Activity,Service,BroadcastReceiver和ContentProvider创建一个单独的进程。 您还可以有一个承载某些服务和某些活动的流程,以及另一个承载其他服务和活动的流程。

因此,您的问题实际上没有答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM