HandlerThread使用,子线程中创建Handler

1、定义子线程类,继承HandlerThreand

public class MyHandlerThread extends HandlerThread {
    private Handler mUIHandler;//主线程的Handler
    private static final String TAG = "DownloadThread";
    public static final int TYPE_START = 2;//通知主线程任务开始
    public static final int TYPE_FINISHED = 3;//通知主线程任务结束
    public MyHandlerThread(String name) {
        super(name);
    }
    //注入主线程Handler
    public void setUIHandler(Handler mUIHandler) {
        mUIHandler = mUIHandler;
        Log.e(TAG, "setUIHandler: 2.主线程的handler传入到Download线程");
    }
    //线程任务
    public void startTask() {
        Log.e(TAG, "startDownload: 3.通知主线程,子线程任务开始");
        mUIHandler.sendEmptyMessage(TYPE_START);
        //模拟下载
        Log.e(TAG, "startDownload: 5.Download线程下载中...");
        SystemClock.sleep(2000);
        Log.e(TAG, "startDownload: 6.通知主线程,子线程任务完成");
        mUIHandler.sendEmptyMessage(TYPE_FINISHED);
    }
}

2、使用

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private MyHandlerThread mHandlerThread;//子线程
    private Handler mUIhandler;//主线程的Handler
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化,参数为线程的名字
        mHandlerThread = new MyHandlerThread ("mHandlerThread");
        //调用start方法启动线程
        mHandlerThread.start();
        //初始化Handler,传递mHandlerThread内部的一个looper
        mUIhandler = new Handler(mHandlerThread.getLooper()) {
            @Override
            public void handleMessage(Message msg) {
                //判断mHandlerThread里传来的msg,根据msg进行主页面的UI更改
                switch (msg.what) {
                    case MyHandlerThread.TYPE_START:
                        Log.e(TAG, "4.主线程知道子线程任务开始了...这时候可以更改主界面UI");
                        break;
                    case MyHandlerThread.TYPE_FINISHED:
                        Log.e(TAG, "7.主线程知道子线程任务完成了...这时候可以更改主界面UI,收工");
                        break;
                    default:
                        break;
                }
                super.handleMessage(msg);
            }
        };
        //子线程注入主线程的mUIhandler,可以在子线程执行任务的时候,随时发送消息回来主线程
        mHandlerThread.setUIHandler(mUIhandler);
        //子线程任务开始
        mHandlerThread.startTask();
    }
    @Override
    protected void onDestroy() {
        //有2种退出方式
        mHandlerThread.quit();
        //mHandlerThread.quitSafely(); 需要API>=18
        super.onDestroy();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值