AIDL通信 android 在5.0以使用隐式Intent方式来启动Service的问题

转自: http://www.cnblogs.com/xiaoxiaing/p/6278996.html

在使用AIDL进行通信的时候需要开启远程服务,在这里发现android5.0以后不能使用隐式intent :需要指定Intent的ComponentName组件名称信息:

intent.setComponent(xxx),

或指定

Intent的setPackage("包名"),

如果两者都没有指定的话将会报错。
尤其在framework层启动APP层的service时,如果是隐式启动service,可能会导致系统进程挂掉,出现不断重启的现象。

解决方法1:

Intent intent = new Intent();
ComponentName componentName = new ComponentName(pkgName,serviceName);
intent.setComponent(componentName);
context.startService(intent);

解决方法2:

Intent mIntent = new Intent();
mIntent.setAction("XXX.XXX.XXX");//Service能够匹配的Action
mIntent.setPackage(pkgName);//应用的包名
context.startService(mIntent);

AIDL通信Demo

你可能感兴趣的:(android)