messenger进程之间的通讯

来源:互联网 发布:七腾软件科技有限公司 编辑:程序博客网 时间:2024/06/05 19:05

服务端。

package com.animee.messenger_server;import android.app.Service;import android.content.Intent;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.os.RemoteException;import android.util.Log;public class MyService extends Service {    public MyService() {    }//   2. 创建信息的处理器对象Handler, 处理客户端返回的信息(Message)    Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {//      接受客户端传来的信息            int arg1 = msg.arg1;            int arg2 = msg.arg2;            Log.i("tag11","服务器端接受到的内容:arg1=="+arg1+",arg2=="+arg2);            Messenger clientMessenger = msg.replyTo;            Message mess = new Message();            mess.arg1 = 88;            mess.arg2 = 66;            try {                clientMessenger.send(mess);            } catch (RemoteException e) {                e.printStackTrace();            }        }    };//    1.创建一个信使对象    Messenger serverMessenger = new Messenger(handler);    @Override    public IBinder onBind(Intent intent) {// 3.在onBind() 方法中, 返回IBinder对象, messenger.getBinder();        return  serverMessenger.getBinder();    }}

主函数不需要有东西。下面是客户端。

package com.animee.messenger_client;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.os.RemoteException;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;public class MainActivity extends AppCompatActivity {    private ServiceConn conn;    private Messenger serverMessenger;    private Messenger clientMessenger;    Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            int arg1 = msg.arg1;            int arg2 = msg.arg2;            Log.i("tag12","客户端接受服务器的信息:arg1="+arg1+",arg2=="+arg2);        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        conn = new ServiceConn();        clientMessenger = new Messenger(handler);    }    @Override    protected void onStart() {        super.onStart();//       1. 绑定服务        Intent intent = new Intent();//        隐士意图跳转        intent.setAction("com.animee.service");//        隐士意图跳转,通过messenger跨进程通信,5.0之后要求必须指定服务器所属的包名        intent.setPackage("com.animee.messenger_server");        bindService(intent,conn,BIND_AUTO_CREATE);    }    @Override    protected void onDestroy() {        super.onDestroy();        unbindService(conn);    }//3.按钮的点击事件,发送数据到服务器端    public void send(View view) {        Message message = Message.obtain();        message.arg1 = 100;        message.arg2 = 76;//        将客户端的信使对象,存放到message信息当中        message.replyTo = clientMessenger;        try {            serverMessenger.send(message);        } catch (RemoteException e) {            e.printStackTrace();        }    }    class ServiceConn implements ServiceConnection{        @Override        public void onServiceConnected(ComponentName name, IBinder service) {//            2.如果绑定成功后, 在ServiceConnection中的onServiceConnected() 方法中, 得到服务器的信使对象            serverMessenger = new Messenger(service);        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    }}
原创粉丝点击