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

    xiaoxiao2021-03-25  119

    、线程与线程之间进行通信 ①、线程的分类 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)、序列化数据进行信息传递
    转载请注明原文地址: https://ju.6miu.com/read-3950.html

    最新回复(0)