当前位置: 首页 > news >正文

runOnUiThread

runOnUiThread()的使用以及原理实在是太简单了,简单到笔者开始都懒得单独开一篇文章来写它。当然这里说的简单,是针对对Handler比较熟悉的童鞋而言的。不过麻雀虽小,五脏俱全,runOnUiThread()好歹也算得上是一方诸侯,在子线程切换到主线程的众多方法中,有着自己的一席之地,所以,必须得给它单独列传。

   好了,闲话休提,言归正传。runOnUiThread()是Activity类中的方法,它用于从子线程中切换到主线程来执行一些需要再主线程执行的操作。这里先直接看一个例子,看看它是如何使用的:
public class MainActivity extends AppCompatActivity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.tv_test);new Thread(new Runnable() {@Overridepublic void run() {//do something takes long time in the work-threadrunOnUiThread(new Runnable() {@Overridepublic void run() {textView.setText("test");}});}}).start();}
}

简单吧,在子线程中直接调用runOnUiThread方法,第15行就切换到主线程了,直接修改UI。如果使用Lambda表达式,看起来就更简单了:

1 new Thread(() -> {
2 //do something takes long time in the work-thread
3 runOnUiThread(() -> {
4 textView.setText(“test”);
5 });
6 }).start();
相比于通过显示使用Handler,重写AsyncTask方法来说,是不是爽得不要不要的?

   不仅仅使用简单,其原理也非常简单,底层实际上也是封装的Handler来实现的,如下是关键代码:
public class MainActivity extends AppCompatActivity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.tv_test);new Thread(new Runnable() {@Overridepublic void run() {//do something takes long time in the work-threadrunOnUiThread(new Runnable() {@Overridepublic void run() {textView.setText("test");}});}}).start();}
}

mHander是Activity的成员变量,在Activity实例化的时候也跟着初始化了,MainActivity继承自Activity,这里mHandler使用的looper自然是main looper了。attach方法也是在主线程中调用的,mUiThread就表示主线程了。第19行的方法就很容易理解了,如果该方法是运行在主线程,Runnable的run方法会马上运行;而如果不是在主线程,就post到主线程的looper的MessageQueue中排队执行。

https://www.cnblogs.com/andy-songwei/p/12064596.html


http://www.mrgr.cn/news/70902.html

相关文章:

  • C++中的原子操作:原子性、内存顺序、性能优化与原子变量赋值
  • 利用uniapp开发鸿蒙:运行到鸿蒙模拟器—踩坑合集
  • 第十章综合案例——————轮播广告
  • Python世界:力扣题解875,珂珂爱吃香蕉,中等
  • 秋意浓,森林披金装
  • 商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)
  • .NET 公共语言运行时(Common Language Runtime,CLR)
  • MTSET可溶于DMSO、DMF、THF等有机溶剂,并在水中有轻微的溶解性,91774-25-3
  • python开发桌面应用(跨平台) 全流程
  • 数据库管理-第261期 什么是多模融合(20241112)
  • Linux也有百度云喔~
  • 【机器学习】数学知识:指数
  • uniapp—android原生插件开发(2原生插件开发)
  • Taro React-Native IOS 打包发布
  • java基础概念24-内部类1
  • A027-基于Spring Boot的农事管理系统
  • 51c自动驾驶~合集10
  • 京东商品详情数据采集|JAVA|C语言|Python数据采集参数对比
  • 餐饮门店收银系统源码、php收银系统源码
  • 大模型 | 2024年中国智能算力行业白皮书 | 附PDF免费下载
  • 计算机组成原理之多处理器基本概念
  • 计算机新手练级攻略——如何搜索问题
  • 全国城市生态韧性数据集与计算代码(2007-2019年)
  • 2024-11-12 问AI: [AI面试题] 您将如何设计一个人工智能系统来预测电信公司的客户流失?
  • PMP--一、二、三模--分类--变更
  • springboot读取modbus数据