Android中程式與Service互動的方式——總結
前文:Android中程式與Service互動的方式——綜述
以上兩篇文章分別介紹了與Service的五種互動方式,本文主要作為一個補充和總結。
1. 服務型別比較
表1.1
2. 五種互動方式比較
表2.1
通過表1.1和表2.1我們可以知道:
(1) 跨程式通訊
只有Broadcast、Messenger、AIDL這三種方式支援跨程式通訊,也就是Server可以執行在獨立的程式中並與之通訊。
(2) 易用性
通過對比之後發現Broadcast、SharedPreferences、Interface這三種方法使用起來比較方便,也較容易掌握,而Messenger和AIDL使用起來稍微繁瑣一些,特別是AIDL。
(3) 執行效率
因為是模擬下載以及資料交換量較小,因此對於執行效率來說影響不大。但如果資料量較大,那麼Messenger、Interface以及AIDL的執行效率較高,而Broadcast和SharedPreferences的效率相對較低。系統會優先處理系統的Broadcast,如果此時正好發出我們的Broadcast,那麼接收會有延遲。對於SharedPreferences來說,檔案操作如果涉及道德資料吞吐量較大,那麼延遲會較高,穩定性也狠難得到保證。
(4) 可擴充套件性
對於Broadcast和SharedPreferences因為執行效率的原因,如果再加上擴充套件(比如傳遞大量資料),這兩種方法就會捉襟見肘。同時在BroadcastReceiver中的onReceive方法中不能處理長耗時事件,否則會出現ANR錯誤。同樣的,對於SharedPreferences方法,如果有大量的資料需要寫入檔案的話,那麼也會耗時,同樣存在操作風險。因為Messenger、Interface以及AIDL可以直接新增相應的處理方法來擴充套件,因此擴充套件性較高。
3. 注意事項
3.1 如果採用bindService()方法啟動Server端的話,需要通過ServiceConnection()方法來獲取Server端返回的binder物件。
3.2 在呼叫 bindService 繫結到Service的時候,應當保證在處理完成之後呼叫unbindService解除繫結(儘管 Activity 被 finish 的時候繫結會自動解除,並且Service會自動停止)。
3.3 使用startService啟動服務之後,一定要使用stopService停止服務,不管是否使用bindService。
3.4 同時使用 startService 與 bindService 時要注意,Service 的終止,需要unbindService與stopService同時呼叫才能終止 Service。如果先呼叫 unbindService 此時服務不會自動終止,再呼叫stopService之後服務才會停止;如果先呼叫 stopService 此時服務也不會終止,而在呼叫 unbindService或者之前呼叫 bindService的Context不存在了(如Activity 被 finish 的時候)之後服務才會停止。
3.5 當裝置螢幕在“橫”“豎”切換時,此時因為Activity會重新建立,因此旋轉之前的使用bindService 建立的連線便會斷開(Context 丟失了),就相當於已經解除繫結了。
相關文章
- Android中Service總結Android
- Android總結篇系列:Android ServiceAndroid
- android 跨程式點選方式總結Android
- Flutter 與 Android 的互動FlutterAndroid
- iOS中WKWebView互動使用總結iOSWebView
- 程式通訊方式總結與盤點
- WKWebView和WebView與JS的互動方式WebViewJS
- C#與Python互動方式C#Python
- Android中活動間通訊總結Android
- Android中的Web ServiceAndroidWeb
- Android Service和IntentService知識點詳細總結AndroidIntent
- Android webview 與 js(Vue) 互動AndroidWebViewJSVue
- Android與WebView資料互動AndroidWebView
- Http(s)與後臺互動方式HTTP
- weex與android互動初步接入,遇到的坑Android
- React Native與Android通訊互動React NativeAndroid
- systemctl的操作詳解總結及其與service的區別
- Android中Activity的四種啟動方式Android
- Android 與 JavaScript 互動 支援的資料型別AndroidJavaScript資料型別
- JS中繼承方式總結JS中繼繼承
- Android與Flutter混合開發-UI互動AndroidFlutterUI
- GraphQL.js 與服務端互動的新方式JS服務端
- Android:巢狀滑動總結Android巢狀
- Android中實現短音訊和震動的一些總結Android音訊
- 總結非同步程式設計的六種方式非同步程式設計
- web互動方式---ajaxWeb
- Android動態許可權總結Android
- 前端和React Native程式碼互轉總結前端React Native
- 從業務互動方式和社交價值中區別CRM與SCRM
- 高階動畫繫結功能:角色與物品的互動動畫
- Kubenetes裡pod和service繫結的實現方式
- 數字展廳中互動投影的展示方式有哪些
- 基於ResponderChain的物件互動方式AI物件
- 基於 ResponderChain 的物件互動方式AI物件
- Android webview JS 互動AndroidWebViewJS
- python與mysql互動中的各種坑PythonMySql
- 使用 JSBridge 與原生 IOS、Android 進行互動(含 H5、Android、IOS 端程式碼,附 Demo)JSiOSAndroidH5
- android中String與InputStream之間的相互轉換方式Android
- Cordova外掛中JavaScript程式碼與Java的互動細節介紹JavaScript