线程之间通信、进程之间通信

、线程与线程之间进行通信
     ①、线程的分类 UI线程(主线程)、工作线程
     ②、通信可能便会想到Handler。通常情况下我们在主线程(UI线程)与工作线程之间进行通讯
         实现数据之间的传递。为什么可以在主线程中进行和工作线程之间进行通讯呢?原因在主线程会
         自动开启一个Looper线程,正是这个Looper线程使得可以和工作线程进行通讯。
     ③、如何实现工作线程与工作线程之间的通信呢。根据主线程和工作线程的实现原理不难发现,我们
         我们需要一个Looper线程。所以我们需要在工作线程中去创建一个Looper线程。
     eg:
        //获取信息的线程
          class GetMsgThread extends Thread{
              Handler mHandler;
              public Handler getHandlerInstance(){
                  //在Run()方法执行之后才会赋值
                  return mHandler;
              }

              @Override
              public void run() {
                  super.run();
                  //创建一个Looper线程
                  Looper.prepare();
                  mHandler=new Handler(){
                      @Override
                      public void handleMessage(Message msg) {
                          super.handleMessage(msg);
                          Log.i("TAG","确认收到消息--------------->"
                                  +"线程名:"+Thread.currentThread().getName()
                                  +"消息:"+msg.obj
                          );
                      }
                  };
                  Looper.loop();
              }
          }
        //发送信息的线程
        class SendMsgThread extends Thread{
            @Override
            public void run() {
                super.run();
                for (int i=0;i>5;i++){
                    Message msg = Message.obtain();
                    msg.what=1;
                    msg.obj= "当前时间“"+System.currentTimeMillis();
                    new GetMsgThread().getHandlerInstance().sendMessage(msg);
                    Log.i("TAG","确认发送消息--------------->"
                            +"线程名:"+Thread.currentThread().getName()
                            +"消息:"+msg.obj
                    );
                }
            }
        }
、进程与进程之间进行通信
        ①、进程之间的通信---->四大组件之间ContentProvider内容提供者
            a)、contentProvider内容提供者 底层是通过Binder实现,主要用来为其他APP提供数据。
            b)、自定义一个内容提供者需要实现6个方法,其中只有onCreate实在主线程中回调的,而
            其他5个方法是在Binder中执行的。
            c)、自定义的ContentProvider注册时要提供authorities属性,
            应用需要访问的时候将属性包装成Uri.parse("content://authorities")
            d)、ContentProvider有query,delete,insert等方法
        ②、Socket通信---->java
            a)、在服务器中定义ServerSocket来监听端口,客户端使用Socket来请求端口,
            连通后就可以进行通信。
        ③、AIDL---->强大的通信机制
            a)、AIDL定义服务端暴露的接口,以提供给客户端来调用,AIDL使服务器可以并行处理,
            而Messenger封装了AIDL之后只能串行运行,所以Messenger一般用作消息传递。
        ④、Messenger---->信使
            a)、Messenger是基于AIDL实现的,服务端(被动方)提供一个Service来处理客户端
           (主动方)连接,维护一个Handler来创建Messenger,在onBind时返回Messenger的binder。
            b)、双方用Messenger来发送数据,用Handler来处理数据。Messenger处理数据依靠Handler,
            所以是串行的,也就是说,Handler接到多个message时,就要排队依次处理。
        ⑤、Bundle、Intent---->传递数据
            a)、序列化数据进行信息传递

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值