Android HandlerThread

来源:互联网 发布:网络科科是什么意思 编辑:程序博客网 时间:2024/06/06 00:15

HandlerThread 继承自Thread,内部封装了Looper

import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Handler.Callback;import android.os.HandlerThread;import android.os.Message;public class MainActivity extends Activity {HandlerThread handlerThread = new HandlerThread("test");Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);System.out.println("cur_id="+Thread.currentThread().getId());handlerThread.start();System.out.println("handlerThread.id=" + handlerThread.getId());//post(runnable),只是直接运行了run(),run()内ThreadId与UIThread是一样的//handler = new Handler(); //post(runnable),将runnable运行在handlerThread中,这是非UIThread的handler = new Handler(handlerThread.getLooper(), new Callback() {@Overridepublic boolean handleMessage(Message msg) {System.out.println("receive message.whatA=" + msg.what);if (msg.what == 1) {return true;//不再向外层传递} else {return false; //外层的handleMessage() 继续执行}}}) {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);System.out.println("receive message.whatB=" + msg.what);}};handler.post(new Runnable() {@Overridepublic void run() {System.out.println("handler_post_cur_id="+Thread.currentThread().getId());handler.sendEmptyMessage(1);handler.sendEmptyMessage(2);}});}}
运行结果:
01-23 07:12:31.590: I/System.out(12386): cur_id=101-23 07:12:31.590: I/System.out(12386): handlerThread.id=186601-23 07:12:31.590: I/System.out(12386): handler_post_cur_id=186601-23 07:12:31.600: I/System.out(12386): receive message.whatA=101-23 07:12:31.600: I/System.out(12386): receive message.whatA=201-23 07:12:31.600: I/System.out(12386): receive message.whatB=2



0 0