Android Bound Services筆記

來源:互聯網
上載者:User

Service綁定到Android Component組件上,其通訊方式一般是如下三種
1. 在onBind(Intent intent)中返回Binder對象,通過此介面與Service互動
2. 通過IBinder對象建立一個Messenger,通過Handler的方式來與Service互動
3. 通過AIDL進行互動
 
第一種返回Binder的方式是最為方便的,因為可以在Binder中直接返回Service執行個體,使Component直接與 Service 通訊。
但是存在一個局限性,就是只有在Service與Component在同一個進程中的時候才可以通過Binder的方式進行,如果這個Service是一個程式內部使用的,那麼這種方式是首選的通訊方式。
其中需要注意的是:當多個Component綁定到同一個Service的時候,系統只會在第一個Component進行綁定的時候調用onBind方法,而其他的Component在綁定的時候,直接返回第一個返回的Binder,也就是說,多個組件是用的同一個Binder。
如果企圖在不同進程間返回Binder,系統會在運行時報錯。
 
第二種是通過一個Messenger進行互動,Messenger的建立和使用都很簡單,如下:
 
   
    //在Service中
    @Override
    public IBinder onBind(Intent arg0) {
        return mMessenger.getBinder();
    }
   
    private Messenger mMessenger = new Messenger(new HelloHandler());

    class HelloHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_SHORT).show();
            super.handleMessage(msg);
        }
    }
 
 
 
    //在Activity中
    private Messenger mMessenger ;
    private ServiceConnection sc = new ServiceConnection(){

        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.i(TAG, "服務串連");
            mMessenger = new Messenger(service);
            mBound = true;
        }

        public void onServiceDisconnected(ComponentName name) {
            Log.i(TAG, "斷開服務");
            mBound = false;
        }
    };
 
 
這樣就可以通過發送訊息的方式來與Service溝通了,其中Messenger的優勢在於,他可以在Service與Compontent位於不同進程的時候來通訊,這個是Binder方式無法做到的,Messenger底層是使用AIDL實現的。
 
一般來說前兩種可以滿足大多數程式的需求,如果要做並發處理的Service,那麼要使用AIDL來實現,具體見http://developer.android.com/guide/developing/tools/aidl.html
component

 


作者 達小生

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.