HandleThread

来源:互联网 发布:淘宝网排名怎么靠前 编辑:程序博客网 时间:2024/06/14 00:30

HandleThread集成Thread,它是一种可以使用handle的Thread,它在run方法中通过Looper.prepare()来创建一个消息队列,并通过Looper.loop(),来开启消息循环。

@Override    public void run() {        mTid = Process.myTid();        Looper.prepare();        synchronized (this) {            mLooper = Looper.myLooper();            notifyAll();        }        Process.setThreadPriority(mPriority);        onLooperPrepared();        Looper.loop();        mTid = -1;    }

HandleThread与普通Thread的不同之处,普通Thread是在run方法中执行耗时操作,而HandleThread创建了消息队列,外界可以通过Handle的消息方式执行一个具体的任务。HandleThread的run方法是一个无限循环,当不需要使用时,可以通过quit或者quitSafely来终止程序的执行。

HandleThread的使用场景以及好处:

1.在需要重复使用子线程处理任务时,可以使用HandlerThread,它自带Looper使他可以通过消息来多次重复使用当前线程,节省开支,如果在开发中多次使用类似new Thread(){…}.start(),这种方式开启一个子线程,会创建多个匿名线程,使得程序运行变慢。

2.在非UI线程使用消息机制,可以使用HandlerThread,它不会干扰或阻塞UI线程(android系统提供的Handler类内部的Looper默认绑定的是UI线程的消息队列)

HandleThread的具体应用场景体现在IntentService中,可以参照我的下一篇文章IntentService,这里简单的写一个使用的例子,基本可以安照UI线程的Handle的使用方法使用:

public class HandleThreadActivity extends Activity {    private static final String Tag = "HandleThreadActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        HandlerThread mHandlerThread = new HandlerThread("test");        mHandlerThread.start();        Looper mLooper = mHandlerThread.getLooper();        Handler mHandler = new Handler(mLooper) {            @Override            public void handleMessage(Message msg) {                super.handleMessage(msg);                int value = msg.what;                Log.i(Tag, "value====" + value);            }        };        mHandler.sendEmptyMessage(2);    }}

原创粉丝点击