在测试AIDL时,客户端隐式启动服务端Service发现程序崩溃,logCat关键语句为
08-03 19:25:14.708: E/AndroidRuntime(20603): java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.example.ipcdemo.aidl.bookservice }
act表示Intent中指定的action。这个异常说的是Service必须显示启动。但是远程客户端又访问不到服务端的Service类。
查了资料后发现,从5.0开始,Service的启动方式发生了变化,显式启动同前,隐式启动略有变化,就是要指定Service所在的程序包名。具体可见下面这篇博客,讲得十分详细:
其实在startService函数的注释中也有体现:
service Identifies the service to be started. The Intent must be either fully explicit (supplying a component name) or specify a specific package name it is targetted to.