Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息
2014-10-25 15:15
211 查看
MainActivity例如以下:
main.xml例如以下:
package cc.c; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.widget.TextView; /** * Demo描写叙述: * * 演示样例过程例如以下: * 1 子线程给子线程本身发送消息 * 2 收到1的消息后,子线程给主线程发送消息 * 3 收到2的消息后,主线程给子线程发送消息 * * 为实现子线程给自己本身发送消息,关键还是在于构造Handler时传入的Looper. * 在此就传入该子线程自己的Looper即调用Looper.myLooper(),代码例如以下: * Looper.prepare(); * mHandlerTest1=new HandlerTest1(Looper.myLooper()); * Looper.loop(); * * 所以当mHandlerTest1.sendMessage(message);发送消息时 * 当然是发送到了它自己的消息队列. * * 当子线程中收到自己发送的消息后,可继续发送消息到主线程.此时仅仅要注意构造 * Handler时传入的Handler是主线程的Handler就可以,即getMainLooper(). * 其余没啥可说的. * * * 在主线程处理消息后再发消息到子线程 * * * 事实上这些线程间发送消息,没有什么;关键还是在于构造Handler时传入谁的Looper. * */ public class MainActivity extends Activity { private TextView mTextView; private HandlerTest1 mHandlerTest1; private HandlerTest2 mHandlerTest2; private int counter=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init() { mTextView = (TextView) findViewById(R.id.textView); //1 子线程发送消息给本身 new Thread() { public void run() { Looper.prepare(); mHandlerTest1=new HandlerTest1(Looper.myLooper()); Message message = new Message(); message.obj = "子线程发送的消息Hi~Hi"; mHandlerTest1.sendMessage(message); Looper.loop(); }; }.start(); } private class HandlerTest1 extends Handler { private HandlerTest1(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); System.out.println("子线程收到:" + msg.obj); //2 收到消息后可再发消息到主线程 mHandlerTest2=new HandlerTest2(getMainLooper()); Message message = new Message(); message.obj = "O(∩_∩)O"; mHandlerTest2.sendMessage(message); } } private class HandlerTest2 extends Handler { private HandlerTest2(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); mTextView.setText("在主线程中,收到子线程发来消息:" + msg.obj); //3 收到消息后再发消息到子线程 if (counter==0) { Message message = new Message(); message.obj = "主线程发送的消息Xi~Xi"; mHandlerTest1.sendMessage(message); counter++; } } } }
main.xml例如以下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" android:layout_centerInParent="true" android:layout_marginTop="70dip" /> </RelativeLayout>
相关文章推荐
- Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息
- Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解
- Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解
- Handler详解系列——利用Handler在主线程与子线程之间互发消息,handler详解
- Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息
- 利用Handler在主线程与子线程之间互发消息
- 利用Handler在主线程与子线程之间互发消息,handler详解
- Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)
- 工作线程中利用handler向主线程发送消息
- Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)
- 使用Handler实现主线程与子线程之间互相传递消息
- 安卓基础:Handler, Looper,消息队列,线程及主线程之间的关系
- Android中的动画具体解释系列【4】——Activity之间切换动画
- Looper、Handler应用---实现主线程向子线程发送消息
- Looper、Handler应用---实现主线程向子线程发送消息
- handler 进行主线程与子线程之间的信息传递
- Android面试题 请解释下单线程模型中Message、Handler、MessageQueue、Looper之间的关系
- Android--Handler(承担着子线程和主线程之间的通信)
- Handler消息传递机制(子线程中传递new Handler和主线程中new Handle传递消息)
- Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息