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