Android7.0Messager通信分析

来源:互联网 发布:java 编程思想pdf下载 编辑:程序博客网 时间:2024/06/08 02:11

Messenger是一种实现跨进程通信的方法。是一种轻量级的IPC发难,底层实现是AIDL。

Messenger的构造方法

public Messenger(Handler target){    mTarget =target.getImessenger();}public Messenger(IBinder target){    mTarget = IMessenger.Stub.asInterface(target);}

有以上代码可看出Messenger对AIDL做了封装。

Messenger实现

通过Messenger实现在Service与Acitivity之间的通信。

服务端代码

package com.treeanimals.max.tecent;import android.app.Service;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.os.RemoteException;import android.support.annotation.Nullable;import android.util.Log;/** * Created by 95112 on 8/30/2017. */public class MessengerService extends Service {    private static final  String TAG = "MessengerService";    private static class MessengerHandler extends Handler {        @Override        public void handleMessage(Message msg) {            switch (msg.what){                case 1:                    Log.d(TAG,msg.getData().getString("msg"));                    Messenger client = msg.replyTo;                    Message replyMessage = Message.obtain(null,2);                    Bundle bundle = new Bundle();                    bundle.putString("reply","回复");                    replyMessage.setData(bundle);                    try {                        client.send(replyMessage);                    } catch (RemoteException e) {                        e.printStackTrace();                    }                    break;                default:                    super.handleMessage(msg);            }        }    }    private  final Messenger messengerHandler = new Messenger(new MessengerHandler());    @Nullable    @Override    public IBinder onBind(Intent intent) {        return messengerHandler.getBinder();    }}

Activity中的代码

package com.treeanimals.max.tecent;import android.app.Activity;import android.app.Notification;import android.app.Service;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.os.RemoteException;import android.support.annotation.Nullable;import android.util.Log;/** * Created by 95112 on 8/30/2017. */public class MessagerActivity extends Activity {    private  static final String TAG = "MessagerActivity";    private Messenger messenger;//用于获取Service的Messenger    private Messenger getReplyMessenger =new Messenger(new MessengerHandler() );//接收处理来自Service发来信息的Handler    private ServiceConnection connection = new ServiceConnection() {//建立与Service相连接的Connection        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            messenger = new Messenger(service);            Message msg = Message.obtain(null,1);            Bundle data = new Bundle();            data.putString("msg","test");            msg.setData(data);            //绑定回传            msg.replyTo = getReplyMessenger;            try{                messenger.send(msg);            } catch (RemoteException e) {                e.printStackTrace();            }        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    };    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.messagerlayout);        Intent intent = new Intent(this,MessengerService.class);        bindService(intent,connection, Context.BIND_AUTO_CREATE);    }    @Override    protected void onDestroy() {        unbindService(connection);//解绑        super.onDestroy();    }    private static class MessengerHandler extends Handler {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case 2:                    Log.d(TAG,msg.getData().getString("reply"));                    break;                default:                    super.handleMessage(msg);            }        }    }}

这里写图片描述

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美图m6充不进电怎么办 美图m6卡怎么办 手机出现无命令怎么办 深圳到香港怎么办手续 买车没有指标怎么办 北京摇号中签怎么办 深圳竞拍车牌后怎么办 冰箱玻璃门碎了怎么办 临沂麦德龙的卡怎么办 西安麦德龙超市会员卡怎么办 淮南家乐福退卡怎么办 满月宝宝眼白黄怎么办 坐飞机随身携带行李超重怎么办 婴儿换环境哭闹怎么办 美易分最后联系专员怎么办 三星手机启动不了怎么办 三星a5无法开机怎么办 三星c5死机了怎么办 三星c7无法开机怎么办 老式冰箱不制冷怎么办 电视灰屏了怎么办 沙发床放不下来怎么办 付款收据丢了怎么办 小红书登陆不上怎么办 超出范围的外卖怎么办 新氧订单过期怎么办 夏普电视遥控器失灵怎么办 西门子冰箱噪音大怎么办 高原饭煮不熟怎么办 电饭煲内胆坏了怎么办 电饭煲胶圈掉了怎么办 调温耦合器坏了怎么办 电饭煲主板坏了怎么办 meidea电饭煲出现c1怎么办 冰箱密封条长了怎么办 冰箱冷冻门变形怎么办 海尔冰箱冷藏室结冰怎么办 西门子冰箱冷藏室结冰怎么办 冰箱老是有霜冻 怎么办 冰箱里很多霜冻怎么办? 冰箱里有霜冻怎么办