android中 handler, HandlerThread的联合使用
handler是什么东西,知道英文的都知道handle的意思就是处理,那么handler就是处理者的意思,那么这个处理者处理什么东西呢?他处理的是他自己发到消息队列里的消息。首先当然他要先发消息A到队列中,当handler把消息A往那队列一扔就可以去干其他事情而不用一直等A消息出列,消息到了队列之后就会排队,那管理这条消息队列总得有个对象吧,那就是我们所说的loop对象了,loop在那一站,消息队列就在运行了。当A消息出列时,系统就会通知发这个消息的handler,哥们快来处理你的消息,然后handler对象就会在他的函数handleMessage()中处理这个消息,例如打印这个消息什么的。
???? 当handler对象在activity中使用时,实际上他跟UI主线程位于同一个线程,那这样就不好了,如果handler处理消息很慢,那UI线程不就慢死了,所以我们需要另外创建一个线程,例如创建一个线程就是通过以下语句:
?
HandlerThread handlerThread=new HandlerThread("wenfeng");?
handlerThread.start();? Myhandler myhandler=new
Myhandler(handlerThread.getLooper());
首先创建一个HandlerThread对象,对象名就为wenfeng了,然后运行handlerThread.start();方法,实际上此时就是产生一个looper队列管理者,然后再创建一个Handler对象的子类,传入管理者looper。
源代码:
import
android.app.Activity;import android.os.Bundle;import
android.os.Handler;import android.os.HandlerThread;import
android.os.Looper;import android.os.Message;import
android.widget.Button;import android.widget.ProgressBar;import
android.widget.TextView;public class Layout04 extends Activity {?? ?int
i=0;?? ?TextView mytTextView;??? Button? mybButton;??? ProgressBar
mybar;??? /** Called when the activity is first created. */???
@Override??? public void onCreate(Bundle savedInstanceState) {???????
super.onCreate(savedInstanceState);??????
setContentView(R.layout.main);?????? HandlerThread handlerThread=new
HandlerThread("wenfeng");?????? handlerThread.start();?????? Myhandler
myhandler=new Myhandler(handlerThread.getLooper());?????? Message
msg=new Message();?? //消息???? Bundle bl=new Bundle();???????
//Bundle键值对??????? bl.putString("name", "caisixing");???
msg=myhandler.obtainMessage();//handler获取一个消息容器,这样才可以向里面填充内容??????
msg.setData(bl);?????????? //消息为bundle的内容?????
msg.sendToTarget();???????? //将消息仍到队列中去???? }class Myhandler extends
Handler{? ? public Myhandler(Looper looper){????? //构造方法?? ??? ??
super(looper);?? ?? }?? ?? @Override?? ?? public void
handleMessage(Message msg) {????? //处理消息,打印消息内容?? ??? ?Bundle bl2=new
Bundle();? ? ?? bl2=msg.getData();?? ??? ?System.out.println("name is
"+bl2.getString("name"));?????? ?? }? }}
android2 handler, HandlerThread的联合使用_handlerthread