handler消息机制入门

handler消息机制入门-LMLPHP

handler消息机制入门-LMLPHP

为什么要用handle?

我们在网络上读取图片信息时,是不能把耗时操作放在主线程里面的,当我们在子线程中获取到了图片的消息的时候,我们就需要把这个数据传给主线程。

而直接使用全局变量是不得行的,因为主线程里面的 tv_txt.setText(str);语句都执行完了后,子线程才给str传值。

所以我们需要用到handle。

把子线程获取到的数据放在消息中,然后再handle中处理消息,因为handle被主线程调用,所以这个消息数据最后可以更新主页面。

 package com.example.handlerrumen;

 import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.widget.TextView; public class MainActivity extends Activity {
private TextView tv_txt;
private Handler handler=new Handler(){
//处理消息(被主线程执行)
public void handleMessage(Message msg) {
String str=(String) msg.obj;
tv_txt.setText(str); //判断当前函数是否被主线程调用的方式
// boolean result=Looper.getMainLooper()==Looper.myLooper();
// Log.d("bh",result+"");
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_txt=(TextView) findViewById(R.id.tv_txt);
//创建子线程,并启动
MyThread myTh=new MyThread();
myTh.start();
}
//自定义子线程
class MyThread extends Thread{
@Override
public void run() {
//伪代码来体现
try {
Thread.sleep(6000);
Log.d("bh","访问到网络了");
String str="我是网络数据";
//创建message对象
Message msg=new Message();
msg.obj=str;
//发送一个消息
handler.sendMessage(msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
05-10 20:56