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

来源:互联网 发布:传奇霸业13转身值数据 编辑:程序博客网 时间:2024/05/02 21:08
、线程与线程之间进行通信     ①、线程的分类 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)、序列化数据进行信息传递
1 0