Looper.prepare()方法
prepare方法
public static void prepare() {prepare(true);}
prepare又调用它的重载方法,并将true作为默认形参传入,如果线程未绑定Looper对象则调用sThreadLocal.set(new Looper(quitAllowed))方法。如果已经绑定则抛出一个异常信息“每一个线程只能绑定一个Looper对象”。
private static void prepare(boolean quitAllowed) {if (sThreadLocal.get() != null) {throw new RuntimeException("Only one Looper may be created per thread");}//sThreadLocal.set(new Looper(quitAllowed))首先调用的是sThreadLocal.set()方法,以quitAllowed(也就是true)作为形参并调用Looper的有参构造然后传入一个Looper实例对象。sThreadLocal.set(new Looper(quitAllowed));
}
Looper的有参构造内以true作为形参传入并生成一个信息队列对象引用保存至mQueue成员变量,然后将当前线程引用保存至mThread成员变量。
private Looper(boolean quitAllowed) {mQueue = new MessageQueue(quitAllowed);mThread = Thread.currentThread();}
在MessageQueue有参构造中将quitAllowed(true)保存至mQuitAllowed成员变量。
MessageQueue(boolean quitAllowed) {mQuitAllowed = quitAllowed;mPtr = nativeInit();}
其实写到这里还是没有彻底弄明白,里面涉及了一些native的东西。先备注在这里以后懂了慢慢回头看。
Looper.prepare()方法相关推荐
- 【Android】java.lang.AssertionError use looper thread, must call Looper.prepare() first!异常分析
java.lang.AssertionError: use looper thread, must call Looper.prepare() first! 在消息处理中必须先调用Looper类的pr ...
- Can't create handler inside thread that has not called Looper.prepare()
问题: Can't create handler inside thread that has not called Looper.prepare() 1,在报错的方法前加Looper.prepare ...
- Can't toast on a thread that has not called Looper.prepare()
这个错误说了就是子线程直接弹Toast 就说下我的处理方法 Looper.prepare();Toast.makeText(MainActivity.this, "11111", ...
- java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() ...
- 【转】Android -- Looper.prepare()和Looper.loop()
Looper.prepare()和Looper.loop() 原文地址:http://blog.csdn.net/heng615975867/article/details/9194219 Andro ...
- Android -- Looper.prepare()和Looper.loop() —深度版
Android中的Looper类,是用来封装消息循环和消息队列的一个类,用于在android线程中进行消息处理.handler事实上能够看做是一个工具类.用来向消息队列中插入消息的. (1) Loop ...
- Can't create handler inside thread that has not called Looper.prepare() 解决办法
在开发的过程当中,遇到了想在一个线程中弹出一个提示窗 new AlertDialog.Builder( context),但是就出现了一个问题. java.lang.Runtim ...
- Can't create handler inside thread Thread that has not called Looper.prepare()
今天在子线程里面写了一个Toast 运行程序直接崩溃了 看了下log 如下 最后忽然想到了子线程里面不能直接使用Toast 然后 就添加了 Looper.prepare(); 和 Looper.loo ...
- Android在子线程里使用Toast报错Can't toast on a thread that has not called Looper.prepare()
在接android SDK的时候有时候为了方便debug调试查看,通过Toast输出相关信息, 实际上这个是在子线程中输出的,在logcat里查看有如下报错java.lang.RuntimeExcep ...
最新文章
- CVPR NTIRE 2022|双目超分辨率挑战赛开赛
- SPP-Net 是怎么让 CNN 实现输入任意尺寸图像的?
- RedisTemplate
- 四旋翼姿态解算——基础理论及推导
- Java黑皮书课后题第8章:*8.16(对二维数组排序)编写一个方法,使用下面的方法头对二维数组排序。这个方法首先按行排序,然后按列排序
- 使用Chrome的inspect element注意事项
- idea代码样式模板_阿里p3c(代码规范,eclipse插件、模版,idea插件)
- 两年AI研究经验(教训)总结,进来看看吧! 1
- WINCE7中RTC时钟芯片BQ32K的开发
- ug中模型不见了怎么办_关于UG参数化建模的定义
- SpringBoot 手动配置 @Enable 的秘密
- ALEIS,啊,累死
- 解决js弹窗网页出现白屏
- sCMOS相机的读出噪声
- C# 删除 文件 里面的第一行数据
- VS2008开发Silverlight程序用到的插件
- Ubuntu16.04.4制作自定义安装光盘方案
- Java手机验证码的实现
- Encoder-Decoder 框架
- office2007word不能插入页码解决办法