Android服务未显示在“服务列表”中

问题描述

我有一个在我的android(priv-app)上运行的后台系统服务,我可以使用以下命令正确创建和启动它:

# am start-service  -n <my service>

它可以正常启动,并且可以在ps -A上运行,但是service list没有显示

我想使用am start -a <myservice>.doSomething调用方法。我从没有看到绑定到它的“客户端”。

我可以在dumpsys中看到服务运行:

  * ServiceRecord{ea1df4c u0 com.foo.bar.platformprovision/.PlatformProvisionService}
    intent={cmp=com.foo.bar.platformprovision/.PlatformProvisionService}
    packageName=com.foo.bar.platformprovision
    processName=com.foo.bar.platformprovision
    permission=android.permission.BIND_JOB_SERVICE
    baseDir=/system/priv-app/bar_platformprovision_debug/platformprovision_debug.apk
    dataDir=/data/user/0/com.foo.bar.platformprovision
    app=ProcessRecord{3f8a209 19448:com.foo.bar.platformprovision/u0a113}
    createTime=-21m13s353ms startingBgTimeout=--
    lastActivity=-21m2s910ms restartTime=-21m2s910ms createdFromFg=true
    startRequested=true delayedStop=false stopIfKilled=false callStart=true lastStartId=1

我的onBind代码如下:

  @Override
  public IBinder onBind(Intent intent) {
    Log.i(TAG,"XXX: Service bond");

    IBinder ib = (IBinder) new RemotePlatformServiceImp();
    return ib;
  }

两个问题:

  1. 为什么我看不到我的进程在service list中运行
  2. 如何正确地从adb调用方法(来自AIDL)?

解决方法

此命令adb shell service list仅显示系统服务。应用服务不会在此处显示。

如果您的服务在某个应用程序中,即使该应用程序是系统应用程序,也不会使其成为“系统服务”。这些服务是由SystemServer开始的服务,例如AudioService

adb shell dumpsys activity services将显示应用程序服务的信息。

对于第二个问题,据我所知adb shell service call XXXX也仅适用于系统服务。