Android中切换到主线程执行的方法
作者:lebronzhen 发布时间:2023-08-19 07:02:28
标签:Android,主线程,执行
方法一: view.post(Runnable runnable)
使用 view 对象,调用 post 方法即可在主线程中执行里边的代码,postDelayed 是延时执行,也可以达到相同的效果。例如:
textView.post(new Runnable() {
@Override
public void run() {
textView.setText("更新textView");
}
});
方法二:runOnUiThread(Runnable runnable)
在 Acitivity 中直接调用 runOnUiThread 或者将 Activity 的 context 对象传入子线程调用。例如:
runOnUiThread(new Runnable() {
public void run() {
textView.setText("更新textView");
}
}
方法三:handler.post(Runnable runnable)
如果是在主线程可以直接 new 一个 Handler 对象,如果是在子线程需要获取主线程的 Looper 和 Queue
// 主线程
Handler handler = new Handler();
// 子线程
Handler handler = new Handler(Looper.getMainLooper());
然后调用 post 方法,或者 postAtTime、postAtDelayed 即可。例如:
handler.post(new Runnable() {
@Override
public void run() {
textView.setText("更新textView");
}
});
方法四:handler.sendMessage(Message message)
这个是比较常用的方法通过 sendMessage 发送消息,然后在 handleMessage 中进行处理。例如:
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 处理消息
textView.setText("更新textView" + msg);
switch(msg.what) {
case 0:
// 处理指定消息
break;
}
}
};
handler.sendEmptyMessage(0);
方法五:使用 AsynTask
AsyncTask asyncTask = new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
}
};
doInBackground 方法执行是在子线程中,其返回结果会传递到 onPostExecute 方法中,onPostExecute 就是运行在主线程。
来源:https://juejin.cn/post/6934250830342291469
0
投稿
猜你喜欢
- 我就废话不多说了,大家还是直接看代码吧~public class GatewayContext { public static final
- 前文传送门:ByteBuf使用subPage级别内存分配ByteBuf回收之前的章节我们提到过, 堆外内存是不受jvm垃圾回收机制控制的,
- 这篇文章主要介绍了基于Jasypt对SpringBoot配置文件加密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 用Android studio做一个简易计算器,供大家参考,具体内容如下长话短说,先建立一个Android项目;创建完成后打开activit
- 数独简介数独(shù dú)是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏
- 向量向量是序列容器,表示可以更改大小的数组。就像数组一样,向量对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来
- 对其做了些优化,但此种sql生成方式仅适用于复杂程度不高的sql,所以实用性不是很高,仅仅是写着玩的,知道点mybatis的注解形式的使用方
- private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAd
- 前言似乎委托对于C#而言是一种高级属性,但是我依旧希望你就算第一次看我的文章,也能有很大的收获。所以本博客的语言描述尽量简单易懂,知识点也是
- 举例:存在一个类:Public Class Student{ public string name; public int age;}Stu
- 这篇文章主要介绍了Java向上转型和向下转型实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 本文实例讲述了Android控件之TabHost用法。分享给大家供大家参考。具体如下:以下通过TabHost实现android选项卡。mai
- 三层架构将整个业务应用划分为:(1)界面UI层(2)业务逻辑层(3)数据访问层对于复杂的系统分层可以让结构更加清晰,模块更加独立,便于维护。
- 一、Stream流简单示例需求:按照要求集合创建和遍历创建一个结合,存储多个字符串元素把集合中所有以"张"开头的元素存储
- 一、安装MongoDB4.0.3(××)1.1、官方安装文档https://docs.mongodb.com/manual/tutorial
- 引言树形结构不论在生活中或者是开发中都是一种非常常见的结构,一个容器对象(如文件夹)下可以存放多种不同的叶子对象或者容器对象,容器对象与叶子
- public class FileAccess{//储存所有文件夹名private ArrayList dirs;public FileAc
- 自动注入和@Autowire@Autowire不属于自动注入!注入方式(重要)在Spring官网上(文档),定义了在Spring中的注入方式
- 注:由于工作需要, 也是第一次接触到打印机的相关内容, 凑巧, 通过找了很多资料和帮助后, 也顺利的解决了打印标签的问题(标签的表面信息[二
- 一、简介WorkManager 用于处理 Android 后台任务。我们只需要设置好任务内容、何时执行,剩下的工作就可以完全交给系统处理。它