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

android 在线程中更新界面

在这里插入图片描述

在Android中,你不能直接从子线程中更新UI,因为这会导致应用崩溃。你需要使用HandlerrunOnUiThread()来更新UI。

使用Handler

以下是如何使用Handler在子线程中更新UI的示例:

1. 创建Handler实例:
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.app.Activity;
import android.widget.TextView;public class MainActivity extends Activity {private TextView textViewLog;private Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textViewLog = findViewById(R.id.textViewLog);handler = new Handler(Looper.getMainLooper());}private void updateTextView(final String text) {handler.post(new Runnable() {@Overridepublic void run() {textViewLog.setText(textViewLog.getText() + "\n" + text);}});}private void someBackgroundTask() {new Thread(new Runnable() {@Overridepublic void run() {// Simulate some background worktry {Thread.sleep(2000); // Simulate some work} catch (InterruptedException e) {e.printStackTrace();}// Update the TextView with the resultString hex = "Sample Hex Data";updateTextView("recv: " + hex);}}).start();}@Overrideprotected void onStart() {super.onStart();someBackgroundTask();}
}

使用runOnUiThread

另一种方法是使用runOnUiThread(),这是一个Activity方法,它允许你在UI线程上运行代码。以下是如何使用它:

import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;public class MainActivity extends Activity {private TextView textViewLog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textViewLog = findViewById(R.id.textViewLog);}private void updateTextView(final String text) {runOnUiThread(new Runnable() {@Overridepublic void run() {textViewLog.setText(textViewLog.getText() + "\n" + text);}});}private void someBackgroundTask() {new Thread(new Runnable() {@Overridepublic void run() {// Simulate some background worktry {Thread.sleep(2000); // Simulate some work} catch (InterruptedException e) {e.printStackTrace();}// Update the TextView with the resultString hex = "Sample Hex Data";updateTextView("recv: " + hex);}}).start();}@Overrideprotected void onStart() {super.onStart();someBackgroundTask();}
}

使用AsyncTask (已废弃)

AsyncTask 已被标记为废弃,不推荐使用,但在老版本中也可以用于更新UI。

其他方式

使用现代的Android架构组件,比如 ViewModelLiveData,可以更好地管理线程和UI更新。

总结

在现代Android开发中,推荐使用 HandlerrunOnUiThread() 来从子线程更新UI。确保所有UI更新操作都在主线程上执行,以避免崩溃或不稳定的行为。

相关文章:

  • Typora + Hexo 图片路径问题(Typedown)
  • Flink Sql Redis Connector
  • 数据结构之B数
  • 在JPA项目启动时新增MySQL字段
  • 华为欧拉 openEuler24.03 更新 阿里 yum源
  • 算是一些Transformer学习当中的重点内容
  • suuk-s.php.jpg-python 库劫持
  • 北京宠物美容护理app,化身奇迹“萌”宠
  • 【Java】Java基础语法
  • 使用Python进行自然语言处理:从基础到实战
  • Python开发日记--手撸加解密小工具(2)
  • 数组元素去重
  • WHAT - NextJS 系列之 Rendering - Server Rendering Strategies
  • @PostConstruct 注解的方法用于资源的初始化
  • HTML(12)——背景属性
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • ➹使用webpack配置多页面应用(MPA)
  • C语言笔记(第一章:C语言编程)
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • express如何解决request entity too large问题
  • JavaScript中的对象个人分享
  • Lsb图片隐写
  • nodejs调试方法
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 计算机在识别图像时“看到”了什么?
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 源码安装memcached和php memcache扩展
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #define、const、typedef的差别
  • #NOIP 2014#Day.2 T3 解方程
  • #pragma once
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (转载)利用webkit抓取动态网页和链接
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .Net Web窗口页属性
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .net网站发布-允许更新此预编译站点
  • .Net组件程序设计之线程、并发管理(一)
  • @PreAuthorize注解
  • @SpringBootApplication 包含的三个注解及其含义
  • [20150904]exp slow.txt
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [C++] sqlite3_get_table 的使用
  • [CDOJ 1343] 卿学姐失恋了
  • [CLR via C#]11. 事件