Android 子线程更新UI

Can't create handler inside thread that has not called Looper.prepare()

Activity 中创建了一个子线程用以请求HTTP,回调函数中想要更新UI,比如

Toast.make(context, message).show()

出现文章开头的错误,便知道是Looper的问题

一般来说在工作线程中执行耗时任务,当任务完成时,会返回UI。这时有两种方法可以达到目的。
一种是handler.sendMessage。发一个消息,再根据消息,执行相关任务代码。
另一种是handler.post(r)。r是要执行的任务代码。意思就是说r的代码实际是在UI线程执行的。可以写更新UI的代码。(工作线程是不能更新UI的)。
可参考Volley中的做法:

    if(Looper.myLooper() != Looper.getMainLooper()) {
        Handler mainThread = new Handler(Looper.getMainLooper());
        mainThread.post(new Runnable() {
        public void run() {
            Request.this.mEventLog.add(tag, requestTime);
            Request.this.mEventLog.finish(this.toString());
        }
    });
    return;}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容