HandlerThread使用

来源:互联网 发布:java wait例子 编辑:程序博客网 时间:2024/06/05 05:16

优点:

1.制作一个后台异步线程,需要的时候可以丢一个任务给它,使用灵活

2.可以避免项目中随处可见的new Thread().start(),增加系统开销

3.可以代替Thread+looper+handlerd的写法

缺点:

1.不要执行太耗时的任务(<= 100ms),如果太耗时可能会阻塞其他任务

(此种情况就用线程池吧:http://blog.csdn.net/android_xue/article/details/62896433)

2.要自己控制好合适的生命周期,启动和结束都要自己控制

public class HandlerThreadUtil {    private static HandlerThread mHandlerThread;    private static Looper        mLooper;    public static Handler initHandlerThread(String threadName) {        mHandlerThread = new HandlerThread(threadName);        //一定要手动开启        mHandlerThread.start();        //获取Looper        mLooper = mHandlerThread.getLooper();        if (mLooper != null) {            //返回当前线程的Handler            return new Handler(mLooper);        }        return null;    }    //由于HandlerThreadrun方法是一个无限循环,    // 因此当明确不需要使用HandlerThread    // 的时候,应该终止线程执行    public static void cancle() {        mLooper.quit();    }}
public class MainActivity extends AppCompatActivity {    public static final int TV = 0;    private Handler  mCallBackHandler;    private TextView tv;    private Handler mHanlder = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case TV:                    tv.setText("修改好了......");                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv = (TextView) findViewById(R.id.tv);        //获取HandlerThread实例        mCallBackHandler = HandlerThreadUtil.initHandlerThread("firstThread");        //外界需要通过Handler的消息方式通知HandlerThread执行一个具体任务        mCallBackHandler.post(new myRunnable());    }    class myRunnable implements Runnable {        @Override        public void run() {            try {                Thread.sleep(3000);                Message message = Message.obtain();                message.what = TV;                mHanlder.sendMessage(message);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    @Override    protected void onDestroy() {        super.onDestroy();        //手动结束线程        HandlerThreadUtil.cancle();    }}

原创粉丝点击