您的位置:首页 > 移动开发 > Android开发

android下关于Handler、Looper、HandlerThread之间的联系与区别

2012-11-18 23:09 357 查看
在android下编程如果要用到线程就必然要用到Handler、Looper或者LooperThread,这三者时间的联系与区别是什么呢?通过看SDK、上网看别人写的博客以及自己编程实践,到底是对这三者有了一定的了解,现在将自己的理解写下来,希望对大家可以有点帮助。

Handler:每个Handler实例都与创建该Handler的线程以及线程的消息队列想关联,而Handler的主要作用就是对消息队列进行管理,主要体现在处理或者发送message以及Runnable对象。

Looper:Looper用于维护一个一个线程的消息循环和消息队列,在我看来Looper做的事一些相对较底层的维护工作(本人是一个菜鸟,没有看到这么底层)。一个线程只要有了Looper来管理,就可以接收消息并处理。所以是Looper是用来维护消息队列的,Handler是处理消息队列的消息的。在主线程中,我们可以直接用Hanler来处理消息,这是因为主线程已经有了Looper来维护消息队列了。如果是子线程,就需要自己创建Looper了。

接下来看看SDK上的示例

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();
}
}


好了,说了这么多,还是上上代码吧:

package org.asia;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

public class ThreadTestActivity extends Activity {

private TextView text;

private Button button;

private LooperThread loop;

private Handler hand;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

text=(TextView)findViewById(R.id.text);

button=(Button)findViewById(R.id.button);

loop=new LooperThread();

loop.start();

hand=loop.getHandler();

button.setOnClickListener(new OnClickListener()

{

public void onClick(View v) {

// TODO Auto-generated method stub

hand.sendMessage(null);

}

});

}

class LooperThread extends Thread

{

private Handler handler;

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

Looper.prepare();//创建Looper

handler=new Handler()//创建子线程的handler并且重写handleMessage函数

{

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

super.handleMessage(msg);

System.out.println(Thread.currentThread().getName());

}

};

Looper.loop();//是Looper开始运行起来

}

Handler getHandler()

{

return handler;

}

}

}

HandlerThread:通过以上的代码可以看见,我们需要自己去管理Looper的创建和运行。那么可不可以有一个类把handler和looper都给我们封装好了呢?答案是有,这个类就是HandlerThread类。关于这个类就不需要多说了,大家随便看个代码示例就可以了解了。这里给大家一个链接看看:点击打开链接

LLooperLooperLooperLooperooper
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐