首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android多线程:AsyncTask使用教程(含实例讲解)

作用 实现多线程 在工作线程中执行任务, 耗时任务 异步通信、消息传递 实现工作线程 & 主线程(UI线程)之间的通信,即:将工作线程的执行结果传递给主线程,从而在主线程中执行相关的UI操作 从而保证线程安全...必须在UI线程中调用 * b. 同一个AsyncTask实例对象只能执行1次,若执行第2次将会抛出异常 * c....实例讲解 下面,我将用1个实例讲解 具体如何使用 AsyncTask 6.1 实例说明 点击按钮 则 开启线程执行线程任务 显示后台加载进度 加载完毕后更新UI组件 期间若点击取消按钮,则取消加载 如下图...执行完毕后,则更新UI text.setText("加载完毕"); } // 方法5:onCancelled() // 作用:将异步任务设置为...引用已无效,故复写的onPostExecute()将不生效,即无法更新UI操作 使用建议 在Activity恢复时的对应方法 重启 任务线程 8.

66620

Android 多线程:这是一份详细的AsyncTask使用教程

作用 实现多线程 在工作线程中执行任务, 耗时任务 异步通信、消息传递 实现工作线程 & 主线程(UI线程)之间的通信,即:将工作线程的执行结果传递给主线程,从而在主线程中执行相关的UI操作...必须在UI线程中调用 * b. 同一个AsyncTask实例对象只能执行1次,若执行第2次将会抛出异常 * c....实例讲解 下面,我将用1个实例讲解 具体如何使用 `AsyncTask` 6.1 实例说明 点击按钮 则 开启线程执行线程任务 显示后台加载进度 加载完毕后更新UI组件 期间若点击取消按钮...执行完毕后,则更新UI text.setText("加载完毕"); } // 方法5:onCancelled() // 作用:将异步任务设置为...引用已无效,故复写的onPostExecute()将不生效,即无法更新UI操作 使用建议 在Activity恢复时的对应方法 重启 任务线程 ---- 8.

1.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Android AsyncTask异步处理

在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则:  1....确保只在UI线程中访问Android UI工具包      当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,:用户的按键事件...然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕。 ...AsyncTask执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用(即用户不可直接调用,而应由系统调用),开发者需要做的就是实现这些方法。 ...1) 子类化AsyncTask  2) 实现AsyncTask中定义的下面一个或几个方法  (a)onPreExecute(), 该方法将在执行实际的后台操作UI thread调用。

1.2K30

详解Android 中AsyncTask 的使用

Handler 实例向 UI 线程发送消息,完成界面更新, 优点:对整个过程控制的比较精细; 缺点:代码相对臃肿,多个任务同时执行时,不易对线程进行精确的控制; AsyncTask :比Handler...) : 执行一个异步任务,需要我们在UI线程中调用,触发任务 B、OnPreExecute(): execute(Params… params)调用后立即执行,一般用于在执行后台任务UI做一些标记...(Progress… values)方法执行,直接将进度信息更新UI组建上;此方法在主线程上执行,用于显示任务执行的进度; E、onPostExecute(Result result): 此方法在主线程中执行...Bitmap { /** * 在execute() 方法执行后立即执行,运行在UI线程中, * 在后台任务开始执行,用于标识UI界面 */ protected void onPreExecute...的第三个参数,也就是 * 接收了 从doInBackground() 返回的结果; * 此方法在 doInBackground() 方法执行结束后执行,运行在UI线程中, * 可以对UI进行更新

1K20

Android多线程-AsyncTaskyi(一)

是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后会把执行的进度和最终结果传递给主线程并更新UI。...** * onPreExecute是可以选择性覆写的方法 * 在主线程中执行,在异步任务执行之前,该方法将会被调用 * 一般用来在执行后台任务UI做一些标记和准备工作,...,在异步任务执行完成后,此方法会被调用 * 一般用于更新UI或其他必须在主线程执行的操作,传递参数bitmap为 * doInBackground方法中的返回值 * @param...(3)onProgressUpdate(Progress…),在主线程中执行,该方法在publishProgress(Progress… values)方法被调用后执行,一般用于更新UI进度,更新进度条的当前进度...UI线程中,并执行一些UI相关的操作,更新UI视图。

60820

Android 深入理解Loader机制

一 Loader Android的装载器(loader)是从Android 3.0新引入的API , 主要完成单线程耗时数据异步装载功能,并在数据有更新自动通知UI刷新的作用。...UI更新。...作用和优点: 提供异步加载数据功能; 对数据源变化进行监听,实时更新数据; 在Activity配置发生变化(横竖屏切换)时不避免数据重复加载; 适用于任何Activity和Fragment; 加载耗时数据常用方式...Android开发者都知道不能再在UI线程里去执行耗时操作,甚至在4.0里已经无法在主线程里去访问网络,那么一般加载耗时操作有以下办法。...笔者看了源码,AsyncTaskLoader拥有AsyncTask,在自身实例化后开启一个线程,自我进行executePendingTask(),此方法里其实就在执行asyncTask的mTask.executeOnExecutor

82220

小知识 安卓线程和ui

定时更新ui 一些类似定时更新ui的代码,动画控制。 1.1 多线程定时更改ui 具体就是新启动(不让ui线程sleep而卡住)一个线程去计时,之后定时来通知ui修改。...4.AsyncTask AsyncTask是围绕Thread和Handler构建的一个简单包裹类,可以完成一些后台执行任务后更新UI的操作,api中指出操作不宜过长——a few seconds at...4.1 基本要点 new AsyncTask onPreExecute中执行一些耗时操作的预备动作,可以是ui操作,显示进度条。...doInBackground中执行耗时任务,调用publishProgress来更新进度。 onPostExecute中使用结果数据,更新uidismiss掉进度条。...execute只能执行一次,我们通常会写new MyAsyncTask().execute() 这样的代码,所以为了确保在ui线程中执行execute,我们最好是在ui线程中执行AsyncTask的创建

1.1K100

安卓HttpPost不适用于Python CGI服务器

避免在主线程执行长时间运行的操作,使用异步处理机制,AsyncTask或Kotlin协程。下文将是我开发时候遇到得问题总结以及解决方案一一作了详细说明。...该开发人员在 UI 线程中执行请求,并且已经尝试过许多不同方法并查看了论坛,但都没有解决这个问题。...其次,将请求执行移出 UI 线程。这可以通过使用 AsyncTask 或 Handler 来实现。第三,检查您的 Python CGI 脚本是否正确配置,并且可以处理 POST 请求。...以下是该开发人员提供的修改后的 Android 代码,其中将请求执行移出了 UI 线程:private final String serverIP = "10.0.2.2";​private class...to execute the POST request.new HttpPostTask().execute();在修改后的代码中,HttpPostTask 类是一个 AsyncTask,用于在后台线程中执行

12610

【Android 电量优化】电量优化 ( JobScheduler | JobService | AsyncTask )

AsyncTask 4个方法解析 : onPreExecute : doInBackground 之前执行的方法, 一般在该方法中执行初始化操作 ( 主线程, 可以更新 UI ) doInBackground...: 主要的耗时操作是在该方法中执行的 ( 非主线程, 不能更新 UI ) onProgressUpdate : 在 doInBackground 中调用了 publishProgress 方法, 就会回调该方法..., 一般情况下是在该方法中执行更新 UI 的操作 ( 主线程, 可以更新 UI ) onPostExecute : doInBackground 执行完毕后 , 调用 return 方法后 , 该方法会被调用...避免在不合适的时机执行耗电任务 , 使用蜂窝网络在不合适的时候更新软件 */ private JobScheduler mJobScheduler; /** *.../** * doInBackground 之前执行的方法, 一般在该方法中执行初始化操作 * ( 主线程, 可以更新 UI ) */

1.2K00

Android 进程和线程模型

由于UI线程负责事件的监听和绘图,因此,必须保证UI线程能够随时响应用户的需求,UI线程里的操作应该向中断事件那样短小,费时的操作(网络连接)需要另开线程,否则,如果UI线程超过5s没有响应用户请求,...onCreate,onStart,onResume后,就监听UI的各种事件(Click点击事件)和消息(Handler Message)。...是UI线程创造的,它可以访问UI组件,因此就更新了页面。...onPreExecute(),该方法将在执行实际的后台操作UI thread调用。...,将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。 可以调用publishProgress方法来更新实时的任务进度。

1.5K20

Android | AsyncTask基础梳理

异步任务 目的:方便后台线程中操作后更新UI 封装并简化了异步操作 实现:Thread和Handler进行了封装 实质:Handler异步消息处理机制 参数是泛型:<Params,Progress,Result...子线程; 处理耗时操作,防止UI线程出现ANR现象 UI线程做主线程, 子线程做工作线程; 如果在子线程更新UI更新主线程的东西, app会闪退,崩溃, 保证线程安全; 子线程可以通过以下几个方法..., 切换到主线程更新: Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable,long) AsyncTask... { /** * 方法执行在异步任务之前,执行在主线程中!!...各方法作用概述,代码中注释: public class MainActivity extends AppCompatActivity { //logt 然后回车,快速生成!!!!!!!!

56410

异步处理中使用AsyncTask踩过的坑Android应用界面开发

Android应用界面开发 第三章学习 第三部分#### ---- 异步处理中使用AsyncTask踩过的坑#### AsyncTask是Android提供的工具之一,可以简单方便地用于子线程更新UI...任务一旦完成就可以通过 return 语句来将任务的执行结果返回,如果 AsyncTask的第三个泛型参数指定的是 Void,就可以不返回任务执行结果。...注意,在这个方法中是不可以进行 UI 操作的,如果需要更新 UI 元素,比如说反馈当前任务的执行进度,可以调用 publishProgress(Progress...)方法来完成。...---- 网上找啊找,关于AsyncTask的范例全都写得一模一样,只有更新seekbar等一个UI的。思考了一夜,第二天………… ?...原来,AsyncTask中间这泛型,其实能支持的类型有限吧!(我猜的!),给他2个参数时,运行一次就FINISHED了。所以,需要更新多个UI时候,使用AsyncTask还是得多考虑考虑。 --完--

76210

笔记16 | 解析和练习AsyncTask

前言 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务的类:AsyncTask,我们一般是 继承AsyncTask,然后在类中实现异步操作,然后将异步执行的进度,反馈给UI主线程...有时我们也把他称作UI线程!而在Android App时我们必须遵守这个单线程模型的规则: Android UI操作并不是线程安全的并且这些操作都需要在UI线程中执行!...的AsyncTask,我们可以自己开辟一个线程,完成相关操作后,通过下述两种方法进行UI更新: 前面我们学的Handler,我们在Handler里写好UI更新,然后通过sendMessage()等的方法通知...UI 更新,另外别忘了Handler写在主线程和子线程中的区别哦~ 利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,更新UI时,把Runnable...我们可以用上述两种方法来完成我们的异步操作,加入要我们写的异步操作比较多,或者较为繁琐, 难道我们new Thread()然后用上述方法通知UI更新么?

55460

Android性能优化(十一)之正确的异步姿势

2、 Android线程调度 Android的线程调度由两个主要因素来决定如何在整个系统调度线程:nice values和cgroups。...所以,UI线程(Activity的主线程)通常是default优先级,然而后台线程(AsyncTask的线程)通常是background优先级。...2.2 Cgroups 为了处理这个问题,Android系统使用Linux cgroups(Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源)强制执行更严格的foreground、background...的执行是串行的,在Android1.5——3.0之间AsyncTask是并行的,而到了Android3.0之后AsyncTask执行又回归到了串行。...备注:对于AsyncTask正确的使用姿势,就是区分场景调用不同的执行方法;并且避免出现内存泄漏的问题。

1.2K31

AsyncTask解析

概述 AsyncTask是一个抽象类,它是Android封装的一个轻量级异步操作的类。它可以在线程池中执行后台任务,然后把执行的进度和最终的结果传递到主线程,并在主线程中更新UI。...这个方法不能执行UI操作,如果需要进行UI更新操作,更新任务进度,可以调用 publishProgress(Progress…)来完成。 onProgressUpdate(Progress...)...当在后台任务中调用 publishProgress(Progress…)后,这个方法就会马上被调用,方法中携带的参数是后台任务传过来的,该方法在 主线程运行,所以可以进行UI更新。...返回的数据会被作为该方法的参数传递过来,该方法是在 主线程中运行,可以利用返回的数据进行UI更新操作,提醒任务执行的结果或关闭掉进度条对话框等。...--> onPostExecute() 不需要进度更新:onPreExecute() --> doInBackground() --> onPostExecute() 除了上面的几个核心方法外,AsyncTask

56610

Android面试系列之AsyncTask

因为UI线程阻塞的问题,每一个Android应用开发都会遇到要开工作线程中去做耗时间的操作,相对于new Thread再使用Handler更新UI的话,直接使用AsyncTask无疑是最经济方便的选择。...关于AsyncTask有很多是非,最早的128数量限制,后来MTK的同事还发现AsyncTask中的Handler Bug:在工作线程中先使用AsyncTask会造成它里面的Handler是指向工作线程的...Looper(如果这个工作线程没有创建Looper,程序会崩溃),而这个Handler是静态的,会造成之后无法在onPostExecute方法中更新UI。...最后和UI打交道就交给Handler去处理了。 我们在实际的项目中,还需要关注一些问题: 线程池可以同时执行多少个TASK?...如下图会出现第16个Task比第6-15个Task先执行的情况。 多个AsyncTask任务是串行还是并行?

83860
领券