Android中主线程给子线程发Message

在Android开发中我们也许常在想主线程如何给子线程发Message?

这是一个很好玩的话题通常我们都是在 Activity 中,让子线程执行耗时任务,执行完之后给主线程发送消息让主
线程更新UI。其实还有很多应用场景需要让主线程给子线程发送消息,该消息作为任务的载体,比如在IntentService
中,主线程就给子线程发送了消息,让子线程干活。
给大家写个Demo演示主线程给子线程发送消息。

java
1. package com.yange.message2subthread;
2.
3. import android.os.Bundle;
4. import android.os.Handler;
5. import android.os.Looper;
6. import android.os.Message;
7. import android.util.Log;
8. import android.view.View;
9. import android.app.Activity;
10. . /**
14. * 演示主线程给子线程发送Message
15. . */
16. public class MainActivity extends Activity {
17. private Handler mMySubHandler;
18.
19. @Override
20. protected void onCreate(Bundle savedInstanceState) {
21. super.onCreate(savedInstanceState);
22. setContentView(R.layout.activity_main);
23. }
24. @Override 26. protected void onStart() {
25. super.onStart();
26. /**
27. * 当Activity启动的时候创建一个子线程,并启动
28. */
29. MyThread thread = new MyThread();
30. thread.start(); 33. }
31. /**
29. * 绑定布局中的点击按钮,点击后给子线程发送消息
30.
* @param view
* */
* public void click(View view){
* Message msg = new Message();
* msg.obj = “MainActivity”;
* mMySubHandler.sendMessage(msg);
* }
* /**
* * 绑定布局文件中的按钮2,点击后让子线程退出,关闭子线程
* * 其实这里只需要让子线程的Looper对象退出即可,因为Looper.loop();是线程阻塞的.
* * @param view
* */
* public void click2(View view){
* if (myLooper!=null) {
* myLooper.quit();
* }
}
/**
* 将Looper对象声明为成员变量
* */
* private Looper myLooper;
* @Override
* protected void onDestroy() {
* super.onDestroy();
* /* 62. 在退出的时候,将子线程释放掉,不然可能会导致内存泄露
* */
* if (myLooper!=null) {
* myLooper.quit();
* }
* }
* class MyThread extends Thread{
*
* @Override
* public void run() {
* //1. 创建一个Looper对象(内部创建了MessageQueue,并将MessageQueue作
* 为Looper对象的成员,然后将Looper对象绑定到ThreadLocal中)
* Looper.prepare();
* /**
* * 创建一个Handler
* */
* mMySubHandler = new Handler(){
* @Override
* public void handleMessage(android.os.Message msg) {
* //处理主线程发送的消息
* Log.d(“tag”, “接收到信息”+msg);
* };
* };
* //2. 获取当前Looper对象
* myLooper = Looper.myLooper();
* //3. 让消息循环起来
* Looper.loop();
* Log.d(“tag”,”子线程退出”);
* }
* }
*
* }
*

你可能感兴趣的:(android,Looper,主线程给子线程发信息)