当前位置: 代码迷 >> Android >> Android入门之Handler、Message、MessageQueue跟Looper
  详细解决方案

Android入门之Handler、Message、MessageQueue跟Looper

热度:18   发布时间:2016-04-27 23:19:21.0
Android入门之Handler、Message、MessageQueue和Looper
Handler:作用有两个,发送消息和接收消息,Handler发送的消息被送到指定的MessageQueue中,
Message:Hanler接收和处理的消息对象,属性字段:arg1、arg2、what、obj、replyTo等;其中arg1和arg2是用来存放整型数据的;what是用来保存消息标示的;obj是Object类型的任意对象;replyTo是消息管理器,会关联到一个handler,handler就是处理其中的消息。
Looper:每个线程只能拥有一个Looper,它的loop方法来负责读取MessageQueue中的消息(Message),并将消息分给对应的Handler处理,在UI主线程中已经初始化一个Looper对象了。
MessageQueue:消息队列,由Looper负责管理,采用先进先出的方式来管理Message。

在线程中使用Handler的步骤如下:
1)、调用Looper的prepare()方法为当前线程创建Looper对象,在创建Looper对象时,它的构造器会创建与之配套的MessageQueue
2)、有了Looper之后,创建Handler子类的实例,重写HandleMessage()方法。
3)、调用Loop的loop()方法启动Looper。
具体的关系图:


典型实例代码:
class LooperThread extends Thread {
public Handler mHandler;

public void run() {
Looper.prepare();

mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};

Looper.loop();
}
}
实例代码:
public class MainActivity extends Activity {

EditText myEditText;
Button mybutton;
TextView mytextview;
MyThread myThread;
class MyThread extends Thread
{
public Handler handler;
public void run()
{
Looper.prepare();//创建MessageQueue
handler=new Handler()
{
@Override
public void handleMessage(Message message)
{
// mytextview.append(message.obj.toString());
Toast.makeText(MainActivity.this,message.obj.toString()+"sdsd",Toast.LENGTH_LONG).show();
}
};
Looper.loop();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myEditText=(EditText)findViewById(R.id.myeditext);
mytextview=(TextView)findViewById(R.id.mytextview);
mybutton=(Button)findViewById(R.id.mybutton);
myThread=new MyThread();
myThread.start();
mybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Message message=new Message();
message.obj=myEditText.getText();
myThread.handler.sendMessage(message);

}
});
}

}

实例图片:

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案