淺談Android Activity與Service的互動方式_Android

來源:互聯網
上載者:User

實現更新下載進度的功能

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的互動方式的全部內容了,希望對大家有所協助,多多支援雲棲社區~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.