Android跨进程通讯,其中有一种方式就是发送广播。java
1. 首先注册接收广播,并设置多进程。android
使用android:process设置多进程。安全
参数值有两种形式,进程名以":"开头属于当前应用的私有进程,其余应用的组件不能和他跑在同一个进程中,不以":"开头的进程属于全局进程,其余应用能够经过sharedUserId方式和它跑在同一个进程中。app
<application> <receiver android:name=".service.ConnectionReceiver" android:process=":kaleido"> <intent-filter> <action android:name="com.tools.kaleido.intent.action.CONNECTION" /> </intent-filter> </receiver> </application>
2. 发送广播.net
String action = "com.tools.kaleido.intent.action.CONNECTION"; Intent intent = new Intent(action); sendBroadcast(intent);
正常状况,这种就能够实现启动多进程的广播。code
但我遇到过2种状况xml
1、使用permission的状况blog
1. 若是设置了permission,必须设置protectionLevel,不然没法启动进程
<!-- 声明权限 --> <permission android:name="com.tools.kaleido.permission.CONNECTION" android:protectionLevel="signature"/> <!-- 使用指定的权限 --> <uses-permission android:name="com.tools.kaleido.permission.CONNECTION"/> <application> <receiver android:name=".service.ConnectionReceiver" android:process=":kaleido"> <intent-filter> <action android:name="com.tools.kaleido.intent.action.CONNECTION" /> </intent-filter> </receiver> </application>
2. 启动广播时,添加权限io
String action = "com.tools.kaleido.intent.action.CONNECTION"; Intent intent = new Intent(action); sendBroadcast(intent, "com.tools.kaleido.permission.CONNECTION");
2、在部分手机上,仍是没法启动
须要到安全中心把App的自启动权限开启,或者华为的手机管家里把App的自启动权限开启。
能够参考:
Android 8.0行为变动: https://developer.android.com/about/versions/oreo/android-8.0-changes
https://my.oschina.net/android520/blog/2218898