Android Messenger 简介

   初学service,根据官方文档对进程通信的方法messenger进行一个简单的介绍。Messager是利用Handler形式处理,
   它是线程安全的,这也表示它不支持并发处理。在实现IPC进程间通信的过程中,大部分情况下,我们的应用不需要并发处理。
   因此,我们只需要使用Messenger方式。
   以下是 Messenger 的使用方法摘要:
   1.服务实现一个 Handler,由其接收来自客户端的每个调用的回调
   2.Handler 用于创建 Messenger 对象(对 Handler 的引用)
   3.Messenger 创建一个 IBinder,服务通过 onBind() 使其返回客户端
   4.客户端使用 IBinder 将 Messenger(引用服务的 Handler)实例化,然后使用后者将 Message 对象发送给服务
   5.服务在其 Handler 中(具体地讲,是在 handleMessage() 方法中)接收每个 Message。

   下面我们通过一个简单的例子来实现:
public class MessengerService extends Service {
    public  static  final int SAY_HELLO=0x1;
    public MessengerService() {
    }

    //1.服务实现一个 Handler,由其接收来自客户端的每个调用的回调
    private Handler handler=new Handler(){
       //5.服务在其 Handler 中(具体地讲,是在 handleMessage() 方法中)接收每个 Message。
        @Override
        public void handleMessage(Message msg) {
          switch(msg.what) {
              case SAY_HELLO:
                  String info=(String) msg.obj;
                 Toast.makeText(getApplicationContext(),info,Toast.LENGTH_SHORT).show();
                  break;
            }
        }
    };

    //2.创建 Messenger 对象(对 Handler 的引用)
    private Messenger messenger=new Messenger(handler);

    //3.Messenger 创建一个 IBinder,服务通过 onBind() 使其返回客户端
    @Override
    public IBinder onBind(Intent intent) {
        return messenger.getBinder();
    }
}
    注意:服务就是在 Handler 的 handleMessage() 方法中接收传入的 Message,并根据 what 成员决定下一步操作。
    客户端只需根据服务返回的 IBinder 创建一个 Messenger,然后利用 send() 发送一条消息。
    例如,以下就是一个绑定到服务并向服务传递SAY_HELLO 消息的简单 Activity:
    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    Messenger mService;
    boolean flag =false;
    private ServiceConnection conn=new ServiceConnection() {
        //服务连接时
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mService=new Messenger(service);
            flag=true;
        }
        //服务断开连接时
        @Override
        public void onServiceDisconnected(ComponentName name) {
            mService=null;
            flag=false;
        }
    };

    @Override
    //在onStart()中绑定服务
    protected void onStart() {
        super.onStart();
        Intent service=new Intent(this,MessengerService.class);
        bindService(service,conn, Context.BIND_AUTO_CREATE);
    }
    //在onStop()中解除绑定服务
    protected void onStop(){
        super.onStop();
        if (flag){
            unbindService(conn);
            flag=false;
        }
    }

    //对单击事件进行命令动作传输动作
    public void MessageonClick(View view){
        //创建(获取)一个消息对象
        Message msg=Message.obtain();
        msg.what=MessengerService.SAY_HELLO;
        msg.obj="更新啦";
        try {
            mService.send(msg);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

简单的就讲解这里啦。已上传源代码。下载地址:
http://download.csdn.net/detail/cyy950611/9823473

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值