子线程中使用Handler
在子线程中使用Handler
- 在子线程中使用handler就意味着handler的实例是在子线程中去创建的。
Looper.prepare();
mHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {Log.d(TAG," mHandler is coming");handler_main.sendEmptyMessage(1);}
};
mHandler.sendEmptyMessage(1);
Looper.loop();
- 如果在调用之前必须调用Looper.prepare()方法,这个是在当前线程中创建一个looper出来,如果是普通的应用场景可以直接使用HandlerThread,其中是带有Looper的。
- 第二点值得注意的就是,Looper.loop()这个方法是无限循环的,所以在Looper.loop()后边的程序代码块是无法执行到的。loop()方法的主要作用是一直不断的通过queue.next()方法来读取来自messagequeue中的msg,这个方法是block的状态,如果queue中没有消息的话会一直阻塞在这里。
- 关于Looper还有一个方法,当我们需要获取Looper实例时,可以直接在对应线程调用Looper looper = Looper.myLooper();来获取,默认情况下,系统只会给MainT
hread分配一个looper。
在子线程中更新UI
- 这个听上去好像有点问题,其实不然,这句话是可以实现的。方法就是在子线程中获取UI线程的looper,然后再创建handler实例,在handlerMessage()方法中去更新UI。
handler_main = new Handler(getMainLooper()){@Overridepublic void handleMessage(Message msg) {helloTextView.setText("getMainLooper");}
};
今天写这篇文章主要是前几天被一个问题疑惑住了,如何在没有上下文的情况下使用子线程去更新UI,其实就是getMainLooper()获取UI线程的looper就可以了。关于Handler还有很多可以写的,下次有空再补上。
子线程中使用Handler相关推荐
- Android入门第37天-在子线程中调用Handler
简介 前一章我们以一个简单的小动画来解释了Handler. 这章我们会介绍在子线程里写Handler.如果是Handler写在了子线程中的话,我们就需要自己创建一个Looper对象了:创建的流程如下: ...
- Android中Handler的使用方法——在子线程中更新界面
本文主要介绍Android的Handler的使用方法.Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列.每个Handler对象与创建它的线程相关联,并且每个Ha ...
- 安卓在子线程中实现更新UI界面的三种方法 Handler+Message、runOnUiThread、控件.post()
1.说明 安卓中UI线程为主线程,更新UI界面必须在主线程中进行,在子线程中实现更新UI界面的三种方法:Handler.RunOnUiThread.控件.post() 2.1 Handler (1)定 ...
- Handler消息机制(四):子线程可以创建Handler吗
默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handle都是在ui线程进行的.这种情况属于子线程给 ...
- 【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )
文章目录 一.判定当前线程是否是主线程 二.子线程中执行主线程方法 三.主线程中执行子线程方法 一.判定当前线程是否是主线程 在 Android 中 , 如果要判定当前线程是否是主线程 , 可以使用如 ...
- Android子线程中更新UI的4种方法
方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage ...
- Android进阶:六、在子线程中直接使用 Toast 及其原理
最近因为个人原因,很久没有更文章,感谢关注的小伙伴,望谅解! 一般我们都把Toast当做一个UI控件在主线程显示.但是有时候非想在子线程中显示Toast,就会使用Handler切换到主线程显示. 但是 ...
- 为什么子线程中不能直接更新UI
点击上方"dotNET全栈开发","设为星标" 加"星标★",每天11.50,好文必达 全文约4000字,预计阅读时间8分钟 当初有同事就碰 ...
- android 线程 界面,android开发教程之子线程中更新界面
每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联. Handler一般有两种用途:1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器.2)线程间 ...
- 在子线程中更改主线程中的控件的信息,在子线程中用toast
一丶在子线程中不允许更改主线程中的控件的信息,也不允许在子线程中用toast,我们要更改的话 (1)消息机制:使用handler (由主线程调用) 在主程序中Handler handler = new ...
最新文章
- 查找数组B中不在数组A中的元素
- 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用
- Selenium WebDriver- actionchians模拟鼠标悬停操作
- WebShop WebSocket server 和WebSocket客户端的一对多关系维护
- Python排序算法之快速排序
- 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积
- Python+OpenGL实现物体快速运动时的模糊效果
- 前大厂员工谈中美企业区别,中企不用单元测试,仅靠QA检查代码?
- OpenStack云计算快速入门之三:OpenStack镜像管理
- 思科ASA防火墙升级为云端防火墙
- 发票查验系统帮你轻松解决发票管理各种问题
- Python2笨方法学习Python--习题二:注释和井号
- 信息论与编码2 BCH码的构造
- 动态代理之Waiter案例
- Java 是否应该使用通配符导入( wildcard imports)
- C语言中getch()的用法
- erc20根据合约地址获取所有交易记录
- 计算机架构设计的 8 个伟大思想
- stm32启用内部晶振(stm32设置外部晶振)
- 我的AI之路(54)--使用Pytorch内置的动作识别模型