一行程式碼實現Android的跨程式呼叫與通訊
後第一發,帶來一款更簡潔方便的Android程式通訊方案。看了網上太多的Binder以及跨程式講解,最後回到我們自己來進行跨程式通訊時發現還是相當繁瑣,定義aidl、定義Service、bindService
等一系列操作搞得頭都大了。 可簡單輕鬆解決程式間通訊問題,幾行程式碼搞定,任意程式隨時註冊服務,隨時同步獲取服務以及支援跨程式的事件匯流排。
介紹
更方便更簡潔的Android程式通訊方案,無需進行bindService()操作,不用定義Service,也不需要定義aidl。 支援IPC級的Callback,並且支援跨程式的事件匯流排。可同步獲取服務。採用面向介面方式進行服務註冊與呼叫,服務呼叫方和使用者完全解耦。
接入
1. 在全域性build裡新增倉庫
allprojects { repositories { ...... maven { url '' } } }
2. 在app的build裡新增依賴
dependencies { implementation 'com.github.zhangke3016:CmProcess:1.0.3' }
使用
1. 在Application的attachBaseContext方法中初始化
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); VCore.init(base); }
2. 定義對外提供服務功能的介面和實現
如果註冊本地服務,引數以及回撥介面沒有限制;
如果註冊遠端服務,引數型別必須為基本資料型別或者可序列化型別(serializable/parcelable),並且非同步回撥介面需要使用提供的'IPCCallback`。
public interface IPayManager { String pay(int count); //遠端服務呼叫,非同步回撥介面需要使用提供的'IPCCallback`。 String pay(int count, IPCCallback callBack); }
3. 註冊或者反註冊服務,可在任意程式呼叫;註冊的程式本地服務需要在本程式取消註冊
//註冊本地 + 遠端服務 VCore.getCore().registerService(IPayManager.class, this); //取消註冊本地 + 遠端服務 VCore.getCore().unregisterService(IPayManager.class); //註冊本地服務 VCore.getCore().registerLocalService(IPayManager.class, this); //取消註冊本地服務 VCore.getCore().unregisterLocalService(IPayManager.class);
4. 可在任意程式透過介面型別獲取服務呼叫
IPayManager service = VCore.getCore().getService(IPayManager.class); //獲取本地服務 //IPayManager service = VCore.getCore().getLocalService(IPayManager.class); //注意:如果服務未註冊時,service為null if(service != null){ //同步呼叫. String message = service.pay(5000); //非同步回撥. 推薦使用提供的 BaseCallback 已將回撥結果切換至主執行緒 service.pay(5000, new BaseCallback() { @Override public void onSucceed(Bundle result) { //Main thread 回撥結果在主執行緒 } @Override public void onFailed(String reason) { //Main thread } }); //或者 service.pay(5000, new IPCCallback.Stub() { @Override public void onSuccess(Bundle bundle) throws RemoteException { // binder thread } @Override public void onFail(String s) throws RemoteException { } }) }
5. 事件的釋出與訂閱
//訂閱事件 可在任意程式的多個位置訂閱 VCore.getCore().subscribe("key", new EventCallback() { @Override public void onEventCallBack(Bundle event) { //main thread String name = event.getString("name"); Log.e("TAG", "onEventCallBack: " + name + " " + (Looper.myLooper() == Looper.getMainLooper())); } }); //釋出事件 釋出事件後 多個程式註冊的EventCallback會同時回撥: Bundle bundle = new Bundle(); bundle.putString("name", "DoDo"); VCore.getCore().post("key",bundle); //取消訂閱 VCore.getCore().unsubscribe("key");
作者:zhangke3016
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3016/viewspace-2822126/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android跨程式通訊Android
- 詳解 CmProcess 跨程式通訊的實現
- 【漫畫技術】Android跨程式通訊Android
- 從AIDL看Android跨程式通訊AIAndroid
- Android中通過Messenger與Service實現程式間雙向通訊AndroidMessenger
- Android跨程式通訊之非AIDL(二)AndroidAI
- Android中AIDL實現程式通訊(附原始碼下載)AndroidAI原始碼
- Android通過繼承Binder類實現多程式通訊Android繼承
- Android探索之AIDL實現程式間通訊AndroidAI
- Android Messenger完全解析 實現程式間通訊AndroidMessenger
- golang實現子程式通訊Golang
- Java實現TCP通訊程式JavaTCP
- Android Binder跨程式與非跨程式的傳輸異同原始碼分析Android原始碼
- 20 行 Python 程式碼實現加密通訊Python加密
- Android 之 Binder與程式間通訊Android
- 呼叫通訊錄實現思路
- 實現不同程式之間的通訊
- 程式間通訊的另類實現
- Android程式間的通訊Android
- Android中SurfaceView視訊播放實現程式碼AndroidView
- IPCInvoker,Android跨程式呼叫如此簡單Android
- 一行程式碼實現微前端行程前端
- Framework 原始碼解析知識梳理(2) 應用程式與 WMS 的通訊實現Framework原始碼
- Framework 原始碼解析知識梳理(1) 應用程式與 AMS 的通訊實現Framework原始碼
- 教你C語言實現通訊錄的詳細程式碼C語言
- 使用AIDL實現程式間的通訊AI
- Android 程式間通訊Android
- Android 多程式通訊Android
- 一行 Python 程式碼實現並行Python並行
- 一行程式碼實現ViewPager卡片效果行程Viewpager
- 用postMessage實現跨域通訊跨域
- 通過 App Groups 實現程式間通訊APP
- Android程式間通訊–訊息機制及IPC機制實現薦Android
- 在 OpenResty 裡實現程式間通訊REST
- Activity和Service跨程式通訊的兩種方式
- iOS 一行程式碼實現呼叫系統相機與相簿,可配置導航欄背景與字型顏色iOS行程
- 自己實現一個Electron跨程式訊息元件元件
- 用NSConnection實現不同程式間的通訊