Android UI线程和普通线程的交互

      当应用启动就会创建一个主线程(UI线程),非UI线程不能修改界面或者重绘界面,UI操作只能在主线程中进行,当有耗时的操作要遵循新开线程处理,这就涉及到了子线程执行完毕或执行的过程中,和主线程交互的问题,常用的方法有如下几点

1. Handler + Rxbus

最简单的场景,子线程中Rxbus发送message,在UI线程的观察者监听中收到消息,重绘UI

//主线程声明
 private Handler uiHandler;

//主线程onCreate回调定义
uiHandler = new Handler();
        //子线程中


          
                    //通知关闭popWindow
                    RxBus.getDefault().post(RxCode.FACE_BLACK_DISMISS, "");
                 
               
         
//UI线程中
    
 Subscription subscription = RxBus.getDefault()
                .toObservable(RxBusBaseMessage.class)
                .subscribe(new Action1<RxBusBaseMessage>() {
                    @Override
                    public void call(RxBusBaseMessage message) {
                        if (message.getCode() == RxCode.FACE_BLACK_DELETE) {

                            //发送人脸黑名单删除协议
                            SendFaceBlackBean sfBean = new SendFaceBlackBean();
                            sfBean.setFbId(message.getObject().toString());
                            if (STContext.getInst().pcNumber != null && !STContext.getInst().pcNumber.isEmpty()) {
                                sfBean.setPcNumber(STContext.getInst().pcNumber);
                            }
                            sfBean.setMethod("delete");
                            viewModel.insertBlack(sfBean, "");
                        } else if (message.getCode() == RxCode.FACE_BLACK_DISMISS) {

                            uiHandler.post(new Runnable() {
                                @Override
                                public void run() {
                                    /**
                                     更新UI
                                     */
                                    dismissPop();
                                }
                            });
                        }

                    }

                });

2-7

参考:https://blog.csdn.net/figo0423/article/details/79015119,很全面了,但是okhttp的OnResponse回调部分不赞同,因为在回调中是可以直接Toast的,说明还是在主线程里

由上可知,核心都是handler,这个Android 提供用于更新UI的消息处理机制

猜你喜欢

转载自blog.csdn.net/Crystal_xing/article/details/84030345
今日推荐