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中程式與Service互動的方式——綜述Android
- Android中Service的啟動方式及Activity與Service的通訊方式Android
- Android中Service總結Android
- 最全面總結 Android WebView與 JS 的互動方式(含例項Demo)AndroidWebViewJS
- Android WebView —— Java 與 JavaScript 互動總結AndroidWebViewJavaScript
- Android 與WebView中的js程式碼的互動記錄AndroidWebViewJS
- iOS中WKWebView互動使用總結iOSWebView
- React native 與Android原生互動方式(一)React NativeAndroid
- Android總結篇系列:Android ServiceAndroid
- android 跨程式點選方式總結Android
- Flutter 與 Android 的互動FlutterAndroid
- 程式通訊方式總結與盤點
- android客戶端與服務端互動的三種方式Android客戶端服務端
- WKWebView和WebView與JS的互動方式WebViewJS
- h5與native互動總結1H5
- iOS 與 JS 互動開發知識總結iOSJS
- Android 與前端互動Android前端
- C#與Python互動方式C#Python
- Http(s)與後臺互動方式HTTP
- Android的程式與執行緒使用總結Android執行緒
- RN 與android原生互動Android
- oracle中service_name區別總結Oracle
- Android中的NDK總結Android
- Android探索之Service全面回顧及總結Android
- Android中JS與Java的極簡互動庫-SimpleJavaJsBridgeAndroidJSJava
- Android webview 與 js(Vue) 互動AndroidWebViewJSVue
- Android與WebView資料互動AndroidWebView
- Android 原生 WebView 與 JavaScript 互動AndroidWebViewJavaScript
- Android中的Web ServiceAndroidWeb
- JS中繼承方式總結JS中繼繼承
- systemctl的操作詳解總結及其與service的區別
- Android中Java和JavaScript互動AndroidJavaScript
- Android螢幕截圖方式總結Android
- 從業務互動方式和社交價值中區別CRM與SCRM
- GraphQL.js 與服務端互動的新方式JS服務端
- Android Service和IntentService知識點詳細總結AndroidIntent
- weex與android互動初步接入,遇到的坑Android