【Android笔记】多线程与 UI 交互的方法

Android UI界面刷新与交互 一、数据请求与UI界面更新事项 1.1 UI线程 Android在启动应用程序的时候,会为应用创建一个Main线程,这个线程负责将事件分派给相应用户接口的widget,其中包括drawing事件。除了事件分派之外,Main线程还负责应用与Android UI组件(例如, android.widget 和android.view 包)进行交互,因此Main 线程有时候也被称为UI线程。 1.2 ANR Application Not Response简称ANR,程序无响应。 Android不会为每个 阅读详情

一共四种:

1.Activity.runOnUIThread(Runnable action)
2.View.post(Runnable action),View.postDelay(Runnable action)
3.Handler
4.AsyncTask

一、Activity.runOnUIThread(Runnable action)

new Thread(new Runnable() {
    @Override
    public void run() {
        // 子线程中处理一些事…………
        
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 这里的代码在主线程中执行
                
            }
        });
    }
}).start();


二、View.post(Runnable action),View.postDelay(Runnable action)

new Thread(new Runnable() {
    @Override
    public void run() {
        // 子线程中处理一些事…………
        
        textView.post(new Runnable() {
            @Override
            public void run() {
                // 这里的代码在主线程中执行
                
            }
        });
    }
}).start();


三、Handler

1.先在主线程中定义一个Handler:

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case TEST:
            // 处理消息,进行UI操作
            break;
        default:
            break;
        }
    }
};


2.在子线程中用Handler传输Message对象:

new Thread(new Runnable() {
    @Override
    public void run() {
        // 子线程中处理一些事……
        ……
        // 将结果发送到主线程
        Message msg = new Message();
        // 标记
        msg.what = TEST;
        // 可携带两个整型数据
        msg.arg1 = ...
        msg.arg2 = ...
        // 可携带Object对象
        msg.obj = ...
        handler.sendMessage(msg);
    }
}).start();

四、AsyncTask

1.继承AsyncTask抽象类:

/**
 * 三个泛型参数分别为传入的参数、进度单位、返回值类型
 * Void表示不需要传入参数
 */
public class MyTask extends AsyncTask<Void, Integer, String> {
    // 用到的对象
    private Context context;
    private ListView lvApp;

    public MyTask(Context context, ListView listView) {
        super();
        this.context = context;
        this.lvApp = listView;
    }

    /** 任务开始执行之前调用,用于初始化操作 **/
    @Override
    protected void onPreExecute() {
        
    }

    /** 所有代码都在子线程中运行,用于处理耗时任务,不能操作UI **/
    @Override
    protected String doInBackground(Void... params) {
        // ……
        return str;
    }
    
    /** 后台任务通过publishProgress()方法后,此方法很快被调用,可操作UI **/
    @Override
    protected void onProgressUpdate(Integer... values) {
        
    }
    
    /** 后台任务执行完毕并使用return返回时,此方法很快被调用,可操作UI **/
    @Override
    protected void onPostExecute(String result) {
        
    }   
}


2.在主线程中启动任务

new MyTask(arg1, arg2).execute();

每个实例只能执行一次,否则会抛异常。


安卓开发基础深入学习笔记 安卓平台提供了多种布局类型,开发者需要根据具体应用场景选择合适的布局方式。 阅读详情

相关推荐

子线程和主线程5种交互方式 Demo

android 中的五中子线程和主线程交互方式,可针对整个activity的UI或者单个View

Android多线程中UI线程和其他线程进行交互的几种方法小结

阿里二面的时候被问到这个问题,自己答的不全,所以总结下,问题是Android多线程中UI线程怎么和其他线程进行交互? 5个方法: 1、handler 2、Activity.runOnUIThread(Runnable) 3、View.Post(Runnable) 4、View.PostDelayed(Runnabe,long) 5、AsyncTask 方法

Android_Ape 1423

android UI线程和后台交互实例

android UI线程和后台线程交互,包括多线程之AsyncTask等例子展示。。。。。。。。。。。

Android中几种线程交互方式

Android中几种线程交互的方式。

qq_45077023的博客 870

星座SAR动目标检测(GMTI)

参考代码 星座SAR动目标检测 www.youwenfan.com/contentcsg/52399.html。

feifeigo123的博客 549

Carla-UE4Editor导入RoadRunner地图文件(保姆级教程)

以Carla官网导入RoadRunner地图的标准文档为参考,里面增添了很多细节和注意事项,遇到问题的小伙伴过来看看吧。

DSK_981029的博客 1万+

安卓UI界面交互功能的实现方法总结

列表项点击事件是 列表视图中的点击事件处理,ListView支持的两种点击事件,分别是ItemClick事件:即单击某个ItemView时触发的事件;当用户在视图中的按钮上执行点击操作时,会触发一个特定的程序响应,这个响应就是所谓的“按钮点击事件”。这个事件通常与一段代码(或称为事件处理器、事件监听器或事件处理程序)相关联,该代码定义了当事件发生时应该执行的操作。在图形用户界面中,对话框(又称对话方块)是一种特殊的视窗,用来在用户界面中向用户显示信息,或者在需要的时候获得用户的输入响应。

weixin_44454261的博客 1210

山景BP10_128DBG开发板通过蓝牙连接手机放歌实验回顾

最近在学习上海山景公司的BP10_128DBG的开发板,因为网上关于BP10开发板的帖子也比较少,在学习的时候也没有太多的参考资料,基本上都是官方的历程。蓝牙放歌这个demo对我来说也比较复杂,特写下此博客进行记录、总结,大家有需要的可以参考。

weixin_56646002的博客 2020

线程间交互(wait notify)

1 线程间交互 线程间的交互,也就是相互通知,进而达到相互控制,java中线程间的交互要用到java.lang.Object的类的三个方法分别是wait,notify(),notifyAll,三个方法的调用必须在同步环境内调用,也就是线程获取了对象的锁后才能调用。 如果线程A持有线程B的对象的锁,多线程环境下只有当线程A获取了线程B的锁后(同步环境下)时,线程A才能调用B的wait,notify(...

lidongxiu0714 1035

Intel SGX Explained

计算机中最主要的资源是CPU和内存,由操作系统和虚拟管理系统等系统软件来管理这些资源。

hanqdi_的博客 3456

基于深度学习的人脸识别考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

基于深度学习的口罩人脸识别的考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1825

Android中多线程实现

我们使用Thread类时,可以创建Thread的子类并重写其run方法, 或者自定义一个实现Runable协议的类,然后将其与Thread进行绑定。AsyncTask只能在UI线程调用,一般作为Activity的子类, 以便在重写的方法中访问 Activity中的属性和数据。Android中多线程主要有三种实现方式:通过Thread类、AsyncTask或者RxJava。使用RxJava的好处是,通过采用这种封装好的异步调度框架,可以大大简化线程间切换的过程。2. 通过AsyncTask。

老猿的自留地 847

SAP 批次管理(分割评估)

批次分割评估: 业务场景:企业要求各批次物料成本价格不一样。此时可以采用分割批次来实现不同成本 后台配置: (1)、激活分割评估 后台---物料管理----评估与科目设置---分割评估-----激活分割评估 (2)、配置分割评估 后台---物料管理----评估与科目设置---分割评估-----配置分割评估 进入全局性分类后,批次分割采用已有的评估类型“X自动(批)”: ...

willieyuan的博客 1万+

android的多线程与界面交互的方法

使用线程处理 耗时比较长的“业务” 1.Activity.runOnUIThread(Runnable) 2.View.post(Runnable),View.postDelay(Runnable,long) 3、Handler 4、AsyncTask         Android是单线程模型,这意味着Android UI操作并不是线程安全的并且这些操作必须在UI线程中

dingtie835110897的专栏 2120

001、NPU是什么?为什么嵌入式设备需要它?

本文通过作者调试工业相机板卡的经历,引出嵌入式设备为何需要NPU(神经网络处理器)的探讨。文章对比了CPU和NPU的设计哲学差异,指出NPU通过专用乘加器阵列和优化的数据流,能高效处理神经网络运算。作者分析了嵌入式设备使用NPU的三大优势:算力提升、功耗降低和实时性保障,并介绍了三类常见NPU形态。通过一个YOLOv5模型调试案例,揭示了NPU使用中的常见陷阱,最后给出五条实用建议,强调理解NPU原理和局限的重要性。文章生动展现了NPU在嵌入式AI应用中的关键作用。

m0_50546716的博客 126

27、自闭症儿童治疗与玩具设计研究

本研究探讨了自闭症儿童的治疗方法与玩具设计之间的关联,分析了游戏疗法、音乐疗法和职业疗法等在治疗中的应用,并介绍了多种针对自闭症儿童的治疗玩具案例。通过用户研究和多学科合作,提出了以Pro-Ability为核心的设计理念,开发了结合音乐疗法和精细运动训练的智能玩具套件。研究总结了当前成果与局限性,并展望了未来发展方向,旨在为自闭症儿童提供更有效的康复支持。

keras9composer的博客 211

移动应用开发-Android多线程与UI交互(附带实现简单计时器代码)

摘要:本文详细讲解了Android多线程开发与UI交互的实现方法。首先介绍了三种线程创建方式:继承Thread类、实现Runnable接口和使用匿名内部类,强调必须通过start()方法启动线程。其次,针对子线程不能直接操作UI的限制,重点讲解了Handler消息传递机制,包括handleMessage()处理和sendMessage()发送消息的方法。最后通过计时器实例演示了子线程获取时间数据、主线程更新UI的完整实现过程。文章还特别提醒要注意线程生命周期管理,避免内存泄漏问题。

m0_73873908的博客 692

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

安卓服务与多线程

OverrideLog.d(TAG, "服务创建了");// 初始化操作@OverrideLog.d(TAG, "服务启动了");// 执行后台任务@OverrideLog.d(TAG, "服务销毁了");// 释放资源@Override// 返回Binder对象用于Activity与Service通信服务:适合执行后台任务,但需要注意生命周期管理和资源释放多线程:Android UI操作必须在主线程执行,耗时操作应在子线程执行通信机制。

2401_86909484的博客 753

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

UWP与Android中如何在多线程中刷新UI

UWP与Android中如何在多线程中刷新UI 无论我们是在进行UWP开发亦或是Android开发,都会在程序运行的同时产生一个UI线程,这是管理你界面的线程,而这也导致你在子线程中越界修改线程时将会报错。本文将对UWP以及Android更改UI的方式进行讨论。 UWP 现在先假设我们拥有一个子线程thread1,其要去更改Mainpage中的一名为TextBox1的控件内的文字(在此例中Syst...

Whitesad的博客 548

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android中后台线程如何与UI线程交互

我想关于这个话题已经有很多前辈讨论过了。今天算是一次学习总结吧。 在android的设计思想中,为了确保用户顺滑的操作体验。一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务。因此我们必须要重新开启一个后台线程运行这些任务。然而,往往这些任务最终又会直接或者间接的需要访问和控制UI控件。例如访问网络获取数据,然后需要将这些数据处理显示出来。就出现了上面所说的情况。原本这是在正

zqx198810的专栏 1083

Android多线程与界面交互的方法

*Activity.runOnUIThread(Runnable) *View.post(Runnable),View.postDelay(Runnable,long) *Handler *AsyncTask 下面用一个工程实现了上面四种交互方法   public class MainActivity extends Activity {    private TextV

搞学习呢... 538

详解Android中多线程中UI操作

在Android中不支持在多线程中操作UI,所Adroid提供了三种异步任务机制,runOnUiThread,Handler和AsyncTask。 下面 是一个完整例子: public class MainActivity extends Activity { protected static final int thread_quest = 0; ImageButton btn; I

blueskyhk的博客 704
上一篇: Android PackageManager 用法
下一篇: Android公共库的建立方法
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值