美文网首页
HandlerThread使用

HandlerThread使用

作者: 荞麦穗 | 来源:发表于2017-11-24 20:32 被阅读0次

示例代码:

package com.app;

import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private HandlerThread myHandlerThread ;
    private Handler handler ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建一个线程,线程名字:handler-thread
        myHandlerThread = new HandlerThread( "handler-thread") ;
        //开启一个线程
        myHandlerThread.start();
        //在这个线程中创建一个handler对象
        handler = new Handler( myHandlerThread.getLooper() ){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                //这个方法是运行在 handler-thread 线程中的 ,可以执行耗时操作
                Log.d( "handler " , "消息: " + msg.what + "  线程: " + Thread.currentThread().getName()  ) ;

            }
        };

        //在主线程给handler发送消息
        handler.sendEmptyMessage( 1 ) ;

        //在子线程给handler发送数据
        new Thread(new Runnable() {
            @Override
            public void run() {
             handler.sendEmptyMessage( 2 ) ;
            }
        }).start() ;

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        //释放资源
        myHandlerThread.quit() ;//quitSafely();
    }
}

运行结果

/com.app D/handler: 消息: 1  线程: handler-thread
/com.app D/handler: 消息: 2  线程: handler-thread

关键源码:

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

总结:
1、handleMessage()和MessageQueue始终是在一个线程中的。
2、使用HandlerThread关键就在于可以在HandleMessage中进行耗时操作!
3、HandlerThread要及时关闭。
引用:http://www.cnblogs.com/zhaoyanjun/p/6062880.html

相关文章

网友评论

      本文标题:HandlerThread使用

      本文链接:https://www.haomeiwen.com/subject/zanfbxtx.html