当前位置: 移动技术网 > IT编程>移动开发>Android > Android进程间通信之Messenger

Android进程间通信之Messenger

2018年11月05日  | 移动技术网IT编程  | 我要评论

罗永浩 我的奋斗,金贵洋,生死路上分集剧情

messenger

reference to a handler, which others can use to send messages to it. this allows for the implementation of message-based communication across processes, by creating a messenger pointing to a handler in one process, and handing that messenger to another process.

messenger的大概用法是:server端通过service的onbind将messenger返回,clien端拿到,通过messenger的send就可以进行通信。

简单的用法如下:

client端:

package main.xx.com.messager;

import android.content.componentname;
import android.content.context;
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 messenger mclientmessenger = new messenger(new handler(){
        @override
        public void handlemessage(message msg) {
            log.i(common.key,msg.getdata().getstring("key"));

            super.handlemessage(msg);
        }
    });

    private messenger mservermessagenger;

    private serviceconnection serviceconnection = new serviceconnection() {
        @override
        public void onserviceconnected(componentname name, ibinder service) {
            log.i(common.key,"onserviceconnected");

            mservermessagenger = new messenger(service);
        }

        @override
        public void onservicedisconnected(componentname name) {
            mservermessagenger = null;
        };
    };

    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
        bindservice(new intent(mainactivity.this,myservice.class),serviceconnection, context.bind_auto_create);
    }

    @override
    protected void ondestroy() {
        super.ondestroy();
        unbindservice(serviceconnection);
    }

    public void click(view view){
        message message = message.obtain();
        bundle bundle = new bundle();
        bundle.putstring(common.key,"这条消息来自客户端");
        message.setdata(bundle);
        message.replyto = mclientmessenger;
        try {
            mservermessagenger.send(message);
        } catch (remoteexception e) {
            e.printstacktrace();
        }
    }
}
server端:
package main.xx.com.messager;

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 {
    messenger messenger = new messenger(new handler(){
        @override
        public void handlemessage(message msg) {
            log.i(common.key,"handlemessage");

            log.i(common.key,msg.getdata().getstring(common.key));
            try {
                msg.replyto.send(msg);
            } catch (remoteexception e) {
                e.printstacktrace();
            }
            super.handlemessage(msg);
        }
    });
    public myservice() {
    }

    @override
    public void oncreate() {
        log.i(common.key,"oncreate");
        super.oncreate();
    }

    @override
    public ibinder onbind(intent intent) {
        log.i(common.key,"onbind");

        return  messenger.getbinder();
    }
}

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网