android之多线程工作(一)AsyncTask

Android多线程任务优化1:探讨AsyncTask的缺陷 导语:在开发Android应用的过程中,我们需要时刻注意保障应用的稳定性和界面响应性,因为不稳定或者响应速度慢的应用将会给用户带来非常差的交互体验。在越来越讲究用户体验的大环境下,用户也许会因为应用的一次Force Close(简称FC)或者延迟严重的动画效果而卸载你的应用。由于 阅读详情

本文章主要讲解下AsyncTask的使用。

       首先,我们得明确下一个概念,什么是UI线程。顾名思义,ui线程就是管理着用户界面的那个线程!

       android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。这种模式叫做单线程模式。我们在单线程模式下编程一定要注意:不要阻塞ui线程、确保只在ui线程中访问ui组件。

       当我们要执行一个复杂耗时的算法并且最终要将计算结果反映到ui上时,我们会发现,我们根本没办法同时保证上面的两点要求;我们肯定会想到开启一个新的线程,让这个复杂耗时的任务到后台去执行,但是执行完毕了呢?我们发现,我们无法再与ui进行交互了。

      为了解决这种情况,android为我们提供了很多办法。

1)、handler和message机制:通过显示的抛出、捕获信息与ui进行交互;

2)、Activity.runOnUiThread(Runnable):如果当前线程为ui线程,则立即执行;否则,将参数中的线程操作放入到ui线程的事件队列中,等待执行。

3)、View.post(Runnable):将操作放入到message队列中,如果放入成功,该操作将会在ui线程中执行,并返回true,否则返回false

4)、View.postDelayed(Runnable,long)跟第三条基本一样,只不过添加了一个延迟时间。

5)、android1.5以后为我们提供了一个工具类来搞定这个问题AsyncTask.

 

AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。 
  

       Params 启动任务执行的输入参数,比如HTTP请求的URL

。 
  Progress 后台任务执行的百分比。 

 

 

       Result 后台执行任务最终返回的结果,比如String

 

  。 

 

用程序调用,开发者需要做的就是实现这些方法。


  
 

 

1) 子类化AsyncTask

  2) 实现AsyncTask中定义的下面一个或几个方法

     onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。

    doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。

    onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。

    onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.

 

为了正确的使用AsyncTask类,以下是几条必须遵守的准则:

  1) Task的实例必须在UI thread中创建

  2) execute方法必须在UI thread中调用

  3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法

  4) 该task只能被执行一次,否则多次调用时将会出现异常

 

 

 

 

 

------------------------------------------------------------------------------------------

AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应

 

android 多线程Thread,Runnable,Handler,AsyncTask等之间的关系 Java的多线程是Thread实现,跟runnable没有太大关系。 android中因为需要多线程交换数据出现了handler+message+thread实现多线程数据通信。就hanlder本身而言并不是实现多线程。 因为handler+message+thread手写比较负载,所以android提供AsyncTask去实现多线程,并且拥有多线程数据同步的能力。 AsyncTask的本质就是handler+message+thread(线程池)的实现。因此要是简单的使用多线程,android中使用a 阅读详情

相关推荐

【Android -- 多线程】AsyncTask

AsyncTask 直接继承于 Object 类,位置为 android.os.AsyncTask。 首先明确 Android 之所以有 Handler 和 AsyncTask ,都是为了不阻塞主线程(UI线程),且 UI 的更新只能在主线程中完成,因此异步处理是不可避免的。Android 的 AsyncTask 比 Handler 更轻量级一些,适用于简单的异步处理。

Kevin Learn Android 2877

全面详解Android实现多线程的几种方式(史上最全,最详细)

一、前言 Android多线程实现方式包括: 1、基础使用 继承Thread类 实现Runnable接口 Handler 2、复合使用 AsyncTask HandlerThread IntentService 3、高级使用 线程池(ThreadPool) 接下来对这几种实现多线程的方式进行全面 讲解。 二、基础使用 Android多线程实现的基础使用包括: 继承Thread类 实现Runnable接口 Handler 接下来对各个进行分析。 1、继承Thread类 1.1 简介

u013773608的博客 2万+

算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)

量化策略开发,高质量社群,交易思路分享等相关内容

松鼠宽客的博客 2538

Android多线程实现的几种方式

在 Android 中,多线程是指同时运行多个线程,每个线程独立执行自己的任务。Thread、Runnable、线程池等。Android 应用通常运行在主线程(也称为 UI 线程)中,负责处理用户界面的更新和事件响应。然而,有些操作,例如网络请求、耗时计算等,如果在主线程中执行,会阻塞UI响应,导致应用无响应或者卡顿。 为了避免这种情况,开发者可以使用多线程来进行后台任务的处理,从而将耗时的操作放在单独的线程中执行,保持主线程的流畅性和响应性。这样用户就可以在应用执行耗时任务的同时继续与应用进行交互。

wei的博客 1713

为什么类型论是函数式编程的理想基础?

函数式编程(如Haskell、Scala、OCaml)以“函数为核心”“无副作用”“不可变数据”等特性著称,但它的“安全高效”并非凭空而来——背后的关键支撑是类型论。本文将聚焦“类型论如何支撑函数式编程”,从基础概念到具体案例,解释两者的本质联系。本文将按“故事引入→核心概念解释→关系拆解→原理+代码案例→实际应用→总结”的逻辑展开,用“乐高积木”“菜谱”等比喻贯穿全文,确保抽象理论可视化。类型论:程序的“接口规则手册”,定义类型和函数的约束;函数式编程。

AI天才研究院 694

OrangePi Kunpeng Pro 安装 ROS2 + Gazebo

OrangePi Kunpeng Pro 的优点很明显,内置openEuler,配备PD电源,做到开箱即用;板子设计也不错,风扇噪音不大,散热良好,昇腾芯片又确保小板子的性能,接口丰富是这类板子共同的优点,也很好的继承了下来,甚至还可以外接固态,可靠性大大提升。使用起来,哪怕不用openEuler的话,也可以很方便的刷Ubuntu来实现一些需要依赖的开发工作,这次没有跑AI模型,所以对算力的优势还没有很明显的感受,下次可以试一下yolo跑跑看。

Arcan 1822

Android中实现多线程的几种方式

通过合理选择多线程方案,可显著提升 App 的响应速度和用户体验,同时避免 ANR(Application Not Responding)问题。,内部通过 HandlerThread 处理异步任务,适合后台执行独立任务。Android 早期提供的异步任务工具,内部封装了线程切换逻辑。Java 并发框架提供的线程池管理,适合需要控制并发数量的场景。实现线程间通信,适用于需要频繁在主线程更新 UI 的场景。类直接创建并启动线程,适用于简单的异步任务。,适用于需要长时间运行的子线程任务。

Ever69的博客 2547

linux下载NCBI基因组数据

fastq-dump --gzip --split-3 SRR25474921.sra,#使用fastq-dump将sra转换为fastq格式,--split-3 参数可以把双端测序的reads提取出来,左端标示为*_1.fastq;右端标示为*_2.fastq。安装之后转到NCBI网页搜索需要的数据或者到SRA数据中查找,我下载的是SRA数据库中的SRR25474921(SRA中是原始测序数据)prefetch --option-file SRR_Acc_List.txt #下载多个SRA文件。

k7586556的博客 2301

android 工作线程 界面交互,android之多线程工作(一)AsyncTask

本文章主要讲解下AsyncTask的使用。首先,我们得明确下一个概念,什么是UI线程。顾名思义,ui线程就是管理着用户界面的那个线程!android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。这种模式叫做单线程模式。我们在单线程模式下编程一定要注意:不要阻塞ui线程、确保只在ui线程中访问ui组件。当我们要执行一个复杂耗时的算法并且最终要将计算结果反映...

weixin_32702015的博客 285

中科大大数据学院2023年保研夏令营机试题目【无offer,直接放题了~】(2023.07.22下午14:35-17:35考试)

给定一串数字,最后一个数是0表示结尾,表示数字串的终止,为无效数字。将该数字串存储在双向链表中,判断是否为回文串,若是,则输出Yes,否则输出No.

m0_51339444的博客 1921

想在 Visual Studio Code 里进行 ABAP 开发,需要安装的扩展列表

安装完毕后,我们可以将 SAP 系统配置为 Visual Studio Code 连接的远程文件系统。为了连接到 SAP 系统,需要启用 ABAP 开发工具 (ADT) ICF 节点,这与 SAP Hana Studio 等工具使用的服务相同。打开 SAP GUI 并连接到目标系统,运行事务 SICF,然后激活 ADT_SRV 服务,如下所示。这启用了允许代码编辑器和 IDE 连接到 SAP 系统的服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3115

android之多线程工作(一)AsyncTask .

本文章主要讲解下AsyncTask的使用。        首先,我们得明确下一个概念,什么是UI线程。顾名思义,ui线程就是管理着用户界面的那个线程!        android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。这种模式叫做单线程模式。我们在单线程模式下编程一定要注意:不要阻塞ui线程、确保只在ui线程中访问ui组件。        ...

蜗牛的编程路 164

Python爬虫实战:京东/淘宝商品价格与评论监控系统——从User-Agent伪装到编码陷阱的全面攻克

在电商数据驱动决策的今天,无论是个人消费者想抓住历史低价,还是市场分析师需要追踪竞品动态,抑或是算法交易员依赖实时价格信号,自动化的商品价格与评论监控系统都已成为不可或缺的工具。然而,电商平台的反爬虫策略日益严苛,字符编码的“暗坑”更是让初学者屡屡碰壁。本文将以京东(JD.com和淘宝(Taobao.com两大主流平台为目标,手把手带你构建一个稳定、高效的商品监控爬虫。User-Agent伪装——如何模拟真实浏览器行为,突破初级反爬。GBK/UTF-8编码混战。

2201_76125261的博客 75

android多线程处理一个值,android多线程处理(补汉6个汉字字).pdf

Android 多线程北京理工大学计算机学院 金旭亮Android多线程技术基础Android进程 默认情况下,同一应用的所有组件运行于同一进程中,然后,允许同一应用中的不同组件运行于不同的进程,并且可以为任何进程创建附加的线程。也允许不同应用中的组件运行于同一个进程中(只要它们共享同一个LinuxUser ID和 Certificates )。 Android应用有四种组件 :Activit...

weixin_34058060的博客 159

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android多线程

线程的基本用法: android多线程编程其实并不比java多线程特殊,基本都是使用相同的语法,比如说,定义一个线程只需要新建一个类继承自Thread,然后重写父类的run()方法,并在里面编写耗时的逻辑即可, public class MyThread extends Thread { @Override public void run() { //...

weixin_30730151的博客 174

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

DeepTutor 快速上手:自托管 AI 学习助手完整指南

同一个问题问通用聊天机器人,得到的是一篇教科书式长文,它翻都不翻你给它的教材。DeepTutor 是另一类东西:一款自托管、Agent 原生的 AI 学习助手,对话、解题、出题、深度研究全部跑在同一个 Agent 循环上,数据默认留在本地机器。下面按真实使用顺序走一遍,从装好到问出第一句话,再到喂资料、出卷子。 ## 安装并初始化:pip 与 deeptutor init 搞定端口和模型 先让

gitblog_00905的博客 989

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

多线程详解——AsyncTask工作原理(源码详解)

AsyncTask是对Handler与线程池的封装。使用它的方便之处在于能够更新用户界面,当然这里更新用户界面的操作还是在主线程中完成的,但是由于AsyncTask内部包含一个Handler,所以可以发送消息给主线程让它更新UI。另外,AsyncTask内还包含了一个线程池。使用线程池的主要原因是避免不必要的创建及销毁线程的开销。设想下面这样一个场景:有100个只需要0.001ms就能执行完毕的任务,如果创建100个线程来执行这些任务,执行完任务的线程就进行销毁。

闲暇部落 1675

Android中的多线程之AsyncTask

上篇文章我们讲了Android中实现异步机制方式之一-----Handler方式,这一章我们来讲第二种方式----异步类AsyncTask 前面我们了解到Handler方式实现异步还是比较复杂的,不是特别容易理解。而AsycTask方式相对来说就要方便简单多了。先来看一下AsyncTask的一般模式: private class MyAsyncTask extends AsyncTask {

licaomeng的专栏 932

安卓AsyncTask

参考:https://www.jianshu.com/p/ee1342fcf5e7 AsyncTask挺好用,能解决一大堆问题。 下面是总结的使用步骤: 1自定义类继承AsyncTask,里面分别传入三个参数,传入的参数、进度类型、返回的结果类型 2重写继承的相关方法,在相关方法中执行耗时操作和更新ui处理结果的操作 下面是转载的: 前言 多线程的应用在...

博客 572

Android多线程之AsyncTask详解

一 概述 在Android平台上,要执行异步工作时,我们常常会用到AsyncTask。这个类可以算是历史悠久,早在Android 1.5版时,它就存在了。 AsyncTask的使用方法比较简单,无非是创建一个AsyncTask派生类对象,重写其doInBackground()函数,然后在合适时机调用这个对象的execute()或executeOnExecutor()函数即可。 private static class MyTask extends AsyncTask<Void, Void, Void&

liuwg1226的专栏 1155
上一篇: android之PopUpWindow使用实例
下一篇: android之多线程工作(二)handler messge机制
chenzheng_java
博客等级 码龄17年 436粉丝 106原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值