1、Android多线程之间的数据通讯通过Handler来传递Message;
2、在当前线程中创建Message对象,需要发送到哪个线程就调用哪个线程当中的Handler;
3、初始化线程在Thread的构造方法中传入一个Runnable对象(抽象类),并且实现Runnable对象中的run方法;
4、调用Thread的start()方法启动线程;
5、初始化Handler在其构造方法中传入一个Callback对象(接口),并且实现该对象的handleMessage()方法;
6、消息通过handler发送后会自动回调Callback接口中的handleMessage()方法;
7、关键代码:
Activity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package com.yusian.handler; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button innerBtn; private Handler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化按钮监听事件 innerBtn = (Button)findViewById(R.id.btn_inner); innerBtn.setOnClickListener(this); // 初始化handler,接收到消息的处理动作 Handler.Callback callback = new Handler.Callback() { @Override public boolean handleMessage(Message msg) { String str= Thread.currentThread().getName(); System.out.println("当前线程:"+str+", 接收到"+msg.obj); return false; } }; mHandler = new Handler(callback); } @Override // 按钮事件的回调方法 public void onClick(View v) { Runnable runnable = new Runnable() { @Override public void run() { // 新线程的run方法中发送message,谁的Handler谁处理 Message msg = new Message(); String str = Thread.currentThread().getName(); msg.obj = "来自线程"+str+"的消息"; mHandler.sendMessage(msg); } }; Thread thread = new Thread(runnable); thread.start(); } } |
运行结果:
I/System.out: 当前线程:main, 接收到来自线程Thread-617的消息
I/System.out: 当前线程:main, 接收到来自线程Thread-618的消息
I/System.out: 当前线程:main, 接收到来自线程Thread-619的消息
I/System.out: 当前线程:main, 接收到来自线程Thread-620的消息