之前研究过handler
和looper消息队列,不过Android里的handler不是另外开启线程来执行的,还是在主UI线程中,如果想另启线程的话需要用到HandlerThread来实现。在使用HandlerThread的时候需要实现CallBack接口以重写handlerMessage方法,在handlerMessage方法中来处理自己的逻辑。下来给出一个小例子程序。 |
003 | layout文件很简单,就一个按钮来启动HanlderTread线程 |
005 | <?xml
version= "1.0" encoding= "utf-8" ?> |
006 | <LinearLayout
xmlns:android= "http://schemas.android.com/apk/res/android" |
007 | android:layout_width= "fill_parent" |
008 | android:layout_height= "fill_parent" |
009 | android:orientation= "vertical" > |
012 | android:layout_width= "fill_parent" |
013 | android:layout_height= "wrap_content" |
014 | android:text= "@string/hello" /> |
017 | android:id= "@+id/handlerThreadBtn" |
018 | android:layout_width= "wrap_content" |
019 | android:layout_height= "wrap_content" |
020 | android:text= "startHandlerThread" /> |
027 | import android.app.Activity; |
028 | import android.os.Bundle; |
029 | import android.os.Handler; |
030 | import android.os.Handler.Callback; |
031 | import android.os.HandlerThread; |
032 | import android.os.Message; |
033 | import android.view.View; |
034 | import android.view.View.OnClickListener; |
035 | import android.widget.Button; |
041 | public class TestHandlerActivity extends Activity implements OnClickListener{ |
043 | public Button handlerThreadBTN; |
044 | MyHandlerThread handlerThread; |
047 | /** Calledwhentheactivityisfirstcreated.*/ |
049 | public void onCreate(Bundle savedInstanceState){ |
050 | super .onCreate(savedInstanceState); |
052 | System.out.println( "onCreate CurrentThread=" + Thread.currentThread().getName()); |
054 | setContentView(R.layout.main); |
056 | handlerThreadBTN =(Button)findViewById(R.id.handlerThreadBtn); |
057 | handlerThreadBTN.setOnClickListener( this ); |
059 | handlerThread = new MyHandlerThread( "myHanler" ); |
060 | handlerThread.start(); |
061 | //注意: 这里必须用到handler的这个构造器,因为需要把callback传进去,从而使自己的HandlerThread的handlerMessage来替换掉Handler原生的handlerThread |
062 | handler = new Handler(handlerThread.getLooper(), handlerThread); |
068 | public void onClick(View v){ |
070 | handler.sendEmptyMessage( 1 ); |
074 | private class MyHandlerThread extends HandlerThread implements Callback { |
076 | public MyHandlerThread(String name){ |
081 | public boolean handleMessage(Message msg){ |
083 | System.out.println( " handleMessageCurrentThread=" + Thread.currentThread().getName()); |
095 | 07 - 06 09 : 32 : 48.776 :
I/System.out( 780 ): onCreateCurrentThread=main |
096 | 07 - 06 09 : 32 : 55.076 :
I/System.out( 780 ): handleMessageCurrentThread=myHanler |
097 | 07 - 06 09 : 32 : 58.669 :
I/System.out( 780 ): handleMessageCurrentThread=myHanler |
098 | 07 - 06 09 : 33 : 03.476 :
I/System.out( 780 ): handleMessageCurrentThread=myHanler |
102 | 当然 android自己也有异步线程的handler,就是AsyncTask,这个类就是封装了HandlerThread和handler来实现异步多线程的操作的。 |
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理