博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android Looper 非UI线程中更新UI
阅读量:6481 次
发布时间:2019-06-23

本文共 1217 字,大约阅读时间需要 4 分钟。

hot3.png

测试service中使用了一个Toast来打印log。

提示无法调用Looper.prepare()

加入后代码正常执行。

 Looper.prepare();     Toast.makeText(getApplicationContext(), "Services Thread", Toast.LENGTH_LONG).show() Looper.loop();

不过再其他处重新加了一个Toast后出现错误,告知每一个线程只能有一个Looper

Caused by: java.lang.RuntimeException: Only one Looper may be created per thread

查看资料,prepared会创建一个Looper。

所以其他处不再需要重新调用。

     //Looper    public static final void prepare() {        if (sThreadLocal.get() != null) {            throw new RuntimeException("Only one Looper may be created per thread");        }        sThreadLocal.set(new Looper());  //在当前线程中创建一个Looper      }    private Looper() {        mQueue = new MessageQueue();  //关键在这,创建Looper都干了什么。 其实是创建了消息队列          mRun = true;        mThread = Thread.currentThread();    }    Looper    public static final void prepare() {        if (sThreadLocal.get() != null) {            throw new RuntimeException("Only one Looper may be created per thread");        }        sThreadLocal.set(new Looper());  //在当前线程中创建一个Looper    }    private Looper() {        mQueue = new MessageQueue();  //关键在这,创建Looper都干了什么。 其实是创建了消息队列        mRun = true;        mThread = Thread.currentThread();    }

转载于:https://my.oschina.net/kings0527/blog/420270

你可能感兴趣的文章
先有鸡还是先有蛋?
查看>>
Service、IntentService、AIDL简介
查看>>
KVO和 KVC
查看>>
React中使用fetch实现文件上传下载
查看>>
TC基础与自动化
查看>>
一次性彻底了解js event loop 事件循环
查看>>
ali-oss web + 微信小程序 使用
查看>>
setTimeOut与setInterval this总结
查看>>
明辰 : 数字货币主流币行情走势分析交易中最难克服的心理是什么?
查看>>
小镇青年王伟的小程序创业
查看>>
快应用快速入门教程
查看>>
开发者说:如何参与定义一款 IDE 插件
查看>>
前端安全类
查看>>
C:\Program 不是内部或外部命令,也不是可运行的程序
查看>>
码code | 关于小程序·云开发,你想知道的这里都有
查看>>
解决Centos7下安装vsftpd问题
查看>>
全面梳理 CSS3 动画
查看>>
golang命令学习笔记
查看>>
iOS做地图相关需要知道的Tips(一)——坐标系及相互转换方法
查看>>
LeetCode集锦(十九) - 第83题 Remove Duplicates from sorted list
查看>>