Messenger的使用
服务端:
public class MessengerService extends Service {
public static final String TAG = "Messenger";
public static final int MSG_FROM = 1000;
//control+o自动重载
//option+enter自动导包
private Handler mHander = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case MSG_FROM :
Log.i(TAG, "from client" + msg.getData().get("msg"));
//以下代码使服务端在收到信息时可以给客户端回复信息
Messenger mMessenger = msg.replyTo;
Message mMessage = Message.obtain(null, MessengerService.MSG_FROM);
Bundle bundle = new Bundle();
bundle.putString("rep", "reply");
mMessage.setData(bundle);
try{
mMessenger.send(mMessage);
}catch (RemoteException e){
e.printStackTrace();
}
break;
}
}
};
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new Messenger(mHander).getBinder();
}
}
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MessengerService"
android:label="@string/app_name"
android:process=":romote"
/>
</application>
client
Intent intent = new Intent(MainActivity.this, MessengerService.class);
bindService(intent, mService, Context.BIND_AUTO_CREATE);
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(mService);
}
//接收服务端回复的信息
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case MessengerService.MSG_FROM:
Log.i(MessengerService.TAG, "reply :" + msg.getData().get("rep"));
break;
}
}
};
private ServiceConnection mService = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//connect servicer
mMessenger = new Messenger(service);
Message mes = Message.obtain(null, MessengerService.MSG_FROM);
Bundle bun = new Bundle();
bun.putString("msg", "hello world");
mes.setData(bun);
//make server reply
mes.replyTo = new Messenger(mHandler);
try{
mMessenger.send(mes);
}catch (RemoteException e){
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
网友评论