问题描述
我有一个在我的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;
}
两个问题:
解决方法
此命令adb shell service list
仅显示系统服务。应用服务不会在此处显示。
如果您的服务在某个应用程序中,即使该应用程序是系统应用程序,也不会使其成为“系统服务”。这些服务是由SystemServer开始的服务,例如AudioService
adb shell dumpsys activity services
将显示应用程序服务的信息。
对于第二个问题,据我所知adb shell service call XXXX
也仅适用于系统服务。