魅族手機aidl服務綁定失敗問題
這類問題網(wǎng)上的博文都有,第一篇中說的startService(intent)
解決問題的關鍵芦岂,奇葩的魅族手機。
要點(我的理解)
- 針對其他手機锦亦,在Android 5.0以后的使用隱式Intent進行bindService前锰提,需要調(diào)用
intent.setPackage("要啟動的service的應用包名)
,綁定服務的代碼參考如下:private void bindService() { Intent intent = new Intent(); intent.setAction("com.github.zbiext.aidlservicedemo.AIDLService"); // AIDL服務類注冊的action值 intent.setPackage("com.github.zbiext.aidlservicedemo"); // Android 5.0以后 bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); }
- 針對魅族手機疏日,隱式Intent可能存在風險,針對Intent傳值撒汉,廠商一般可能修改底層代碼沟优,如上面代碼在魅族手機是不生效的,導致綁定失敗睬辐,需要使用ComponentName對象挠阁,而且在bindService調(diào)用之前宾肺,調(diào)用startService(intent),具體代碼如下:
private void bindService() { Intent intent = new Intent(); intent.setComponent(new ComponentName("com.github.zbiext.aidlservicedemo", "com.github.zbiext.aidlservicedemo.AIDLService")); // 包名 AIDL服務類名 startService(intent); bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); }
Binder機制 —— Android系統(tǒng)跨進程間通信(IPC)方式之一
應用場景:
- 微博侵俗、微信 oauth2.0 第三方驗證登錄锨用;
- 移動支付,WXPay隘谣、AliPay增拥;
- 進程(不同App)間的數(shù)據(jù)通訊、交互寻歧,用戶信息共享(安全問題)掌栅、token共享、密鑰共享码泛;
- 系統(tǒng)下載任務器猾封;
前提條件: AIDL綁定的Service組件必須啟動,并長時間痹肷海活在內(nèi)存中
ps: 回顧 進程等級(5個)
foreground process(前臺進程)
visible process(可視進程)
service process(服務進程)
background process(后臺進程)
empty process(空進程)
后續(xù)再更 binder連接池晌缘、aidl語法需要注意的地方以及binder的DeathRecipient、遠程斷開API