日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中Messenger的使用

發布時間:2024/4/14 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中Messenger的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

我們使用Handler都是在一個進程中使用的,如何跨進程使用Handler?

其實這個問題不難解決,自己動手對binder進行一些封裝就可以簡單實現。但是當你看系統源碼,就會發現,其實這些android都已經為我們做好了。

使用android系統的android.os.Messenger可以很方便的跨進程使用Handler。下面是示例程序。

?

首先是服務端。

public?class?MessengerTestService?extends?Service?{protected?static?final?String?TAG?=?"MessengerTestService";private?Handler?mHandler?=?new?Handler()?{@Overridepublic?void?handleMessage(Message?msg)?{switch?(msg.what)?{case?1:Log.d(TAG,?"收到消息");//獲取客戶端message中的Messenger,用于回調final?Messenger?callback?=?msg.replyTo;try?{//?回調callback.send(Message.obtain(null,?0));}?catch?(RemoteException?e)?{//?TODO?Auto-generated?catch?blocke.printStackTrace();}break;}}};@Overridepublic?IBinder?onBind(Intent?intent)?{return?new?Messenger(mHandler).getBinder();}}

?

?

然后是客戶端

public?class?MainActivity?extends?Activity?{protected?static?final?String?TAG?=?"MainActivity";Messenger?messenger;Messenger?reply;@Overrideprotected?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");//?綁定服務bindService(intent,?new?ServiceConnection()?{@Overridepublic?void?onServiceDisconnected(ComponentName?name)?{}@Overridepublic?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(null,?1);//?設置回調用的Messengermsg.replyTo?=?reply;try?{messenger.send(msg);}?catch?(RemoteException?e)?{e.printStackTrace();}}private?Handler?handler?=?new?Handler()?{@Overridepublic?void?handleMessage(Message?msg)?{Log.d(TAG,?"回調成功");}}; }

?


客戶端綁定服務端,獲取遠程Messenger的binder對象。調用Messenger的send函數,就可以吧Message發送至服務端的Handler。

同時,如果需要服務端回調客戶端(往客戶端的Handler發消息),則可以在send的Message中設置replyTo,服務端就可以往客戶端發送消息了。

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

構造函數

????public?Messenger(Handler?target)?{mTarget?=?target.getIMessenger();??}

Handler.getIMessenger()返回的是一個IMessenger的binder對象,它的send方法將會調用Handler的sendMessage方法。

????public?void?send(Message?message)?throws?RemoteException?{mTarget.send(message);}

?

?

?

?

轉載于:https://my.oschina.net/u/1177694/blog/687772

總結

以上是生活随笔為你收集整理的Android中Messenger的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。