HandlerThread用法

private HandlerThread mHandlerThread;





private static final int MSG_UPDATE_INFO = 0x110;



//与UI线程管理的handler

private Handler mHandler = new Handler();

//子线程handler

private Handler mThreadHandler;



@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mTvServiceInfo = (TextView) findViewById(R.id.tv);



    //创建后台线程

    initBackThread();





}



private void initBackThread() {

// 开启了mHandlerThread,他是一个子线程,

// 里面的run方法里带有一个无限循环的looper

    mHandlerThread = new HandlerThread("handler");

// 必须先start,否则报错,因为start后会执行Run方法,run方法里绑定了looper

    mHandlerThread.start();

    // 得到mHandlerThread里的looper

    Looper looper = mHandlerThread.getLooper();

// new一个handler,与mHandlerThread的looper绑定,

// 那么这个handler就是子线程的handler了,

// 这个handler里的handleMessage可以处理耗时任务了

    mThreadHandler = new Handler(looper) {

        @Override

        public void handleMessage(Message msg) {

            changeText();

// 发一条空消息,通知mThreadHandler的handlerMessage去执行,开启循环迭代模式

            mThreadHandler.sendEmptyMessageDelayed(MSG_UPDATE_INFO, 1000);

        }





    };





}



@Override

protected void onResume() {

    super.onResume();

// 在onCreate里创建好了子线程的handler,并且开启了循环Looper,

// 现在只要用mThreadHandler发消息,就会触发handleMessage去处理消息(在子线程处理哟)

// ★别忘了发消息,否则不执行handleMessage

    mThreadHandler.sendEmptyMessage(MSG_UPDATE_INFO);



}



/**

 * 模拟一个耗时任务

 */

private void changeText() {



    try {

        Thread.sleep(1000);

        // 注意这个mHandler是在主线程new,所以他使用的是子线程的looper可以操作UI

        // 在哪一个线程new handler(),那么这个handler就与哪一个线程绑定

        // 当然你使用new Handler(Looper looper)的话,你的handler是与Looper所在的线程绑定在一起的



        // 然后,老生常谈mHandler.post(runnable),不一定执行在子线程,而是执行在mhandler所在的线程

        // 这里实在主线程,所以可以更改UI

        mHandler.post(new Runnable() {

            @Override

            public void run() {

                double randomsdds = Math.random();



                mTvServiceInfo.setText(randomsdds + "");

            }

        });



    } catch (InterruptedException e) {



    }





}



@Override

protected void onDestroy() {

    super.onDestroy();

// 释放资源

    mHandlerThread.quit();

}

}




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值