Android——Messenger
16lz
2021-12-04
Messenger
- Messenger介绍
-
- 服务端
-
- 客户端
-
- 效果展示
Messenger介绍
Messenger是一种轻量级IPC方案,它的底层实现是AIDL,可以在不能进程之间进行数据传输
服务端
创建一个Service,在Handler中处理消息,在onBind中返回Messenger对象的Binder
public class MessengerService extends Service { private static final String TAG = "MessengerService"; public static final int MESSAGE_FROM_CLIENT = 20; @Nullable @Override //返回Binder public IBinder onBind(Intent intent) { return messenger.getBinder(); } private final Messenger messenger = new Messenger(new MessengerHandle()); private static class MessengerHandle extends Handler{ @Override public void handleMessage(@NonNull Message msg) { switch (msg.what){ case MESSAGE_FROM_CLIENT: //接受来自客户端的消息 Log.d(TAG,"" + msg.getData().getString("msg")); Messenger client = msg.replyTo; Message RelpyToMessage = Message.obtain(null,MainActivity.MESSAGE_FROM_SERVICE); Bundle ServiceBundle = new Bundle(); ServiceBundle.putString("reply","Hi! Client");//返回消息至客户端 RelpyToMessage.setData(ServiceBundle); try{ client.send(RelpyToMessage); }catch (RemoteException e){ e.printStackTrace(); } break; } super.handleMessage(msg); } }}
在清单文件中配置Service
客户端
首先绑定服务端的Service,然后根据IBinder创建一个Messenger对象,然后在绑定名称向客户端发送消息,依旧在Handler处理服务端的消息
public class MainActivity extends AppCompatActivity{ private static final String TAG = "MainActivity"; public static final int MESSAGE_FROM_SERVICE = 10;//客户端发送给服务端 private Messenger messenger; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(MainActivity.this,MessengerService.class); bindService(intent,connection,BIND_AUTO_CREATE); } @Override protected void onDestroy() { unbindService(connection); super.onDestroy(); } private Messenger myMessenger = new Messenger(new MessengerHandle()); //连接Service并发送消息 private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { messenger =new Messenger(service); Message message = Message.obtain(null, MessengerService.MESSAGE_FROM_CLIENT); Bundle bundle = new Bundle(); //第一次向Service打招呼 bundle.putString("msg","Hi! Service"); message.setData(bundle); //接收客户端信息时,需要把服务端的Messenger通过replyTo参数传递给服务端 message.replyTo = myMessenger; try{ messenger.send(message); }catch (RemoteException e){ e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } }; //接收Service的消息 private static class MessengerHandle extends Handler{ @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); switch (msg.what){ case MESSAGE_FROM_SERVICE: Log.d(TAG,msg.getData().getString("reply")); break; } } }}
效果展示
更多相关文章
- Android消息机制Message消息池
- Android之使用HttpPost提交数据到服务器(Android手机客户端和后台
- Android(安卓)中的消息传递,详解广播机制
- 自定义控件与Handler
- Android(安卓)客户端发送邮件(JMail方式)
- Android(安卓)博客园客户端 (二) 新界面&部分功能
- GoBelieve Android(安卓)SDK接入备忘
- Android(安卓)中Handler
- Android关于 https SSL handshake aborted 问题查找