久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android中Messenger的使用

 univasity 2015-11-11

我們使用Handler都是在一個(gè)進(jìn)程中使用的,,如何跨進(jìn)程使用Handler,?

其實(shí)這個(gè)問題不難解決,自己動(dòng)手對(duì)binder進(jìn)行一些封裝就可以簡單實(shí)現(xiàn),。但是當(dāng)你看系統(tǒng)源碼,,就會(huì)發(fā)現(xiàn),其實(shí)這些android都已經(jīng)為我們做好了,。

使用android系統(tǒng)的android.os.Messenger可以很方便的跨進(jìn)程使用Handler,。下面是示例程序。


首先是服務(wù)端,。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class MessengerTestService extends Service {
  
    protected static final String TAG = "MessengerTestService";
      
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 1:
                Log.d(TAG, "收到消息");
                 //獲取客戶端message中的Messenger,,用于回調(diào)
                final Messenger callback = msg.replyTo;
                try {
                    // 回調(diào)
                    callback.send(Message.obtain(null0));
                catch (RemoteException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                break;
            }
        }
    };
      
    @Override
    public IBinder onBind(Intent intent) {
        return new Messenger(mHandler).getBinder();
    }
  
}



然后是客戶端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class MainActivity extends Activity {
  
    protected static final String TAG = "MainActivity";
    Messenger messenger;
    Messenger reply;
      
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        reply = new Messenger(handler);
        Intent intent = new Intent();
        intent.setClassName("test.messenger""test.messenger.MessengerTestService");
          
        // 綁定服務(wù)
        bindService(intent, new ServiceConnection() {
              
            @Override
            public void onServiceDisconnected(ComponentName name) {
                  
            }
              
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                Toast.makeText(MainActivity.this"bind success"0).show();
                messenger = new Messenger(service);
            }
        }, Context.BIND_AUTO_CREATE);
          
    }
  
    public void sendMessage(View v) {
        Message msg = Message.obtain(null1);
        // 設(shè)置回調(diào)用的Messenger
        msg.replyTo = reply;
        try {
            messenger.send(msg);
        catch (RemoteException e) {
            e.printStackTrace();
        }
    }
      
    private Handler handler = new Handler() {
  
        @Override
        public void handleMessage(Message msg) {
            Log.d(TAG, "回調(diào)成功");
        }
          
    };
}



客戶端綁定服務(wù)端,獲取遠(yuǎn)程Messenger的binder對(duì)象,。調(diào)用Messenger的send函數(shù),,就可以吧Message發(fā)送至服務(wù)端的Handler。

同時(shí),,如果需要服務(wù)端回調(diào)客戶端(往客戶端的Handler發(fā)消息),,則可以在send的Message中設(shè)置replyTo,服務(wù)端就可以往客戶端發(fā)送消息了,。

下面我們看下Messenger的源碼,,還是很簡單的。

構(gòu)造函數(shù)

1
2
3
    public Messenger(Handler target) {
        mTarget = target.getIMessenger();  
    }

Handler.getIMessenger()返回的是一個(gè)IMessenger的binder對(duì)象,,它的send方法將會(huì)調(diào)用Handler的sendMessage方法,。

1
2
3
    public void send(Message message) throws RemoteException {
        mTarget.send(message);
    }

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多