編輯:關於Android編程
實現更新下載進度的功能
1. 通過廣播交互
Server端將目前的下載進度,通過廣播的方式發送出來,Client端注冊此廣播的監聽器,當獲取到該廣播後,將廣播中當前的下載進度解析出來並更新到界面上。
優缺點分析:
通過廣播的方式實現Activity與Service的交互操作簡單且容易實現,可以勝任簡單級的應用。但缺點也十分明顯,發送廣播受到系統制約。系統會優先發送系統級廣播,在某些特定的情況下,我們自定義的廣播可能會延遲。同時在廣播接收器中不能處理長耗時操作,否則系統會出現ANR即應用程序無響應
2. 共享文件交互
這裡提到的共享文件指的是Activity和Service使用同一個文件來達到傳遞數據的目的。我們使用SharedPreferences來實現共享,當然也可以使用其它IO方法實現,通過這種方式實現交互時需要注意,對於文件的讀寫的時候,同一時間只能一方讀一方寫,不能兩方同時寫
優缺點分析:
對於這種方式實現Activity與Service的交互,可以說很方便,就像使用管道,一個往裡寫,一個往外讀。但這種方式也有缺陷,寫入數據較為復雜以及數據量較大時,就有可能導致寫入與讀數據出不一致的錯誤。同時因為經過了一個中轉站,這種操作將更耗時。
3. Messenger交互(信使交互) Handler
Messenger翻譯過來指的是信使,它引用了一個Handler對象,別人能夠向它發送消息(使用mMessenger.send(Message msg)方法)。該類允許跨進程間基於Message通信,在服務端使用Handler創建一個 Messenger,客戶端只要獲得這個服務端的Messenger對象就可以與服務端通信了。也就是說我們可以把Messenger當做Client端與Server端的傳話筒,這樣就可以溝通交流了
優缺點分析:
通過Messenger來實現Activity和Service的交互,稍微深入一點我們就可以知道,其實Messenger也是通過AIDL來實現的。對於前兩種實現方式,Messenger方式總體上來講也是比較容易理解的,這就和平時使用Handler和Thread通信一個道理。
4. Server中自定義接口交互
自定義一個接口,該接口中有一個獲取當前下載進度的空方法。Server端用一個類繼承自Binder並實現該接口,覆寫了其中獲取當前下載進度的方法。Client端通過ServiceConnection獲取到該類的對象,從而能夠使用該獲取當前下載進度的方法,最終實現實時交互。
public interface ICountService { public int getCurrentLoad(); }
public class DownLoadService extends Service implements ICountService{ private ServiceBinder serviceBinder = new ServiceBinder(); public class ServiceBinder extends Binder implements ICountService{ @Override public int getCurrentLoad() { Log.i(TAG, "ServiceBinder getCurrentLoad()... i=:"+i); return i; } } @Override public int getCurrentLoad() { return 0; } }
@Override public IBinder onBind(Intent intent) { Log.i(TAG, "DownLoadService.onBind()..."); return serviceBinder; }
Client端的Timer在bindService()完成之後1秒再開始獲取下載進度,獲取方法是直接通過int curLoad = iCountService.getCurrentLoad();這裡的getCurrentLoad()方法是DownLoadService內部類ServiceBinder中的方法。Client端將獲取到的下載進度更新到介面上並更新進度條。
優缺點分析:
這種方法簡單實用,擴展性強,但其也有一些缺點,比如需要延遲一些再開始獲取Server端的數據,從而無法完全實現從零開始同步更新。綜其所述,通過自定義接口實現Activity與Service交互的方法還是比較實用的。適用於同進程中通信,不能進行跨進程通信。
5. AIDL交互
原理: AIDL屬於Android的IPC機制,常用於跨進程通信,主要實現原理基於底層Binder機制。
優缺點分析:
AIDL在Android中是進程間通信常用的方式,可能使用較為復雜,但效率高,擴展性好。同時很多系統服務就是以這種方式完成與應用程序通信的。
以上就是小編為大家帶來的淺談Android Activity與Service的交互方式的全部內容了,希望對大家有所幫助,多多支持本站~
1、概述 群裡的一個哥們有個需求是這樣的:問題;主要功能就是:1、循環的一個滑動;2、每次滑動結束,保持每個Item的完整。然後我當時給他寫了個Demo,所
PullToRefresh是一套實現非常好的下拉刷新庫,它支持:1.ListView2.ExpandableListView3.GridView4.WebView等多種常
好的,我們繼續來了解IPC機制,在上篇我們可能就是把理論的知識寫完了,然後現在基本上是可以實戰了。一.Android中的IPC方式 本節我們開始詳細的分析各中跨進程的方
本章內容第1節 線性布局第2節 相對布局第3節 幀布局第4節 表格布局第5節 網格布局 線性布局線性布局使用標簽進行配置,對應代碼中的類是android.wid