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

为什么从不调用AsyncTask <>接口的onProgressUpdate()?

从不调用AsyncTask <>接口的onProgressUpdate()的原因可能是因为在AsyncTask的执行过程中,没有调用publishProgress()方法来更新进度。

AsyncTask是Android中的一个轻量级的异步任务处理框架,它可以在后台线程中执行耗时的操作,并在主线程中更新UI。在AsyncTask中,onProgressUpdate()方法用于在主线程中更新任务的进度,而publishProgress()方法用于在后台线程中发布进度更新。如果在执行过程中没有调用publishProgress()方法,那么onProgressUpdate()方法就不会被调用,因此任务的进度就不会被更新。

为了解决这个问题,可以在AsyncTask的doInBackground()方法中调用publishProgress()方法来更新进度,然后在onProgressUpdate()方法中更新UI。

以下是一个简单的AsyncTask示例,它在后台线程中执行耗时的操作,并在主线程中更新UI:

代码语言:java
复制
private class MyAsyncTask extends AsyncTask<Void, Integer, String> {
    @Override
    protected String doInBackground(Void... params) {
        for (int i = 0; i < 100; i++) {
            // 执行耗时的操作
            publishProgress(i); // 发布进度更新
        }
        return "任务完成";
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        // 在主线程中更新UI
        int progress = values[0];
        // 更新进度条
        progressBar.setProgress(progress);
        // 更新文本
        textView.setText("进度:" + progress + "%");
    }

    @Override
    protected void onPostExecute(String result) {
        // 任务完成后的操作
        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
    }
}

在这个示例中,我们在doInBackground()方法中调用publishProgress()方法来发布进度更新,然后在onProgressUpdate()方法中更新UI。当任务完成时,onPostExecute()方法会被调用,我们可以在这个方法中执行任务完成后的操作。

总之,如果从不调用AsyncTask <>接口的onProgressUpdate()方法,可能是因为在AsyncTask的执行过程中没有调用publishProgress()方法来更新进度。为了解决这个问题,可以在AsyncTask的doInBackground()方法中调用publishProgress()方法来更新进度,然后在onProgressUpdate()方法中更新UI。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AsyncTask 使用及封装实践

AsyncTask主要几个方法 Void onPreExecute() 在task 任务开始执行时候调用,在doInBackground(Params… params)方法之前调用,在主线程中执行...当我们调用 publishProgress()方法时候,会调用 onProgressUpdate()这个方法 Void onPostExecute(Result result) 在doInBackground...在Activity里面定义静态方法 把需要访问View对象通过构造函数传递进来 采用接口回调机制 前面说到三种方法,是可以做到AsyncTask与外界进行通讯。但第一第二中方法明显不行。...AsyncTask 使用接口回调机制来进行解耦 使用接口回调机制,首先我们必须有一个接口 public interface DownloadListener { void onStart();...mDstPath = dstPath; mFileName = fileName; mDownloadListener = downloadListener; } } 在相应地方调用我们接口方法

89410

Android AsyncTask实现原理和使用技巧分享

为什么要用AsyncTask 我们写App都有一个原则,主线程不能够运行需要占用大量CPU时间片任务,如大量复杂浮点运算,较大磁盘IO操作,网络socket等,这些都会导致我们主线程对用户响应变得迟钝...2.同时也提供了多线程实现接口,即我们上面写最后一行代码 AsyncTask.THREAD_POOL_EXECUTOR。...,Callback接口是JDK1.5加入高级并发架包里面的一个接口,它可以有一个泛型返回值。...,RunnableFuture接口是JDK提供,看名称就知道它继承了Runnable和Future接口,mFuture是FutureTask一个实例,可以直接被Executor类实例execute。...onPreExecute()方法,此时还在主线程(严格来说是调用AsyncTask执行线程),然后exec.execute(mFuture),把任务交给exec处理,execute mFuture其实就是

73630

Android AsyncTask实现原理和使用技巧分享

为什么要用AsyncTask 我们写App都有一个原则,主线程不能够运行需要占用大量CPU时间片任务,如大量复杂浮点运算,较大磁盘IO操作,网络socket等,这些都会导致我们主线程对用户响应变得迟钝...2.同时也提供了多线程实现接口,即我们上面写最后一行代码 AsyncTask.THREAD_POOL_EXECUTOR。...,Callback接口是JDK1.5加入高级并发架包里面的一个接口,它可以有一个泛型返回值。...,RunnableFuture接口是JDK提供,看名称就知道它继承了Runnable和Future接口,mFuture是FutureTask一个实例,可以直接被Executor类实例execute。...onPreExecute()方法,此时还在主线程(严格来说是调用AsyncTask执行线程),然后exec.execute(mFuture),把任务交给exec处理,execute mFuture其实就是

30930

Android查缺补漏(线程篇)-- AsyncTask使用及原理详细分析

AsyncTask对象必须在主线程中创建。 AsyncTaskexecute必须在主线程中调用。...接着在执行任务前先调用了onPreExecute方法,并将参数赋值给mWorker参数数组,然后使用exec执行在AsyncTask初始化阶段封装好mFuture。...SerialExecutorexecute方法首先会将FutureTask任务加入到mTasks队列中,此时如果没有正在活动任务就会调用scheduleNext执行下一个AsyncTask任务。...在调用AsyncTaskexecutor方法开始执行异步任务时,会首先调用onPreExecute方法通知外界任务已经开始,接着使用线程池执行前面FutureTask任务。...前面所说这个FutureTask任务是在AsyncTask初始化时被封装好,在该任务中调用了doInBackground方法用于异步执行我们添加耗时任务,doInBackground方法执行完毕会通过

52930

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

前言 多线程应用在Android开发中是非常常见,常用方法主要有: 继承Thread类 实现Runnable接口 Handler AsyncTask HandlerThread 今天,我将献上一份...Android多线程:实现Runnable接口使用(含实例教程) 复合使用 Android多线程:AsyncTask使用教程(含实例讲解) Android多线程:AsyncTask原理及源码分析..... params) { ...// 自定义线程任务 // 可调用publishProgress()显示进度, 之后将执行onProgressUpdate...执行任务中,系统会自动调用AsyncTask一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()...执行任务中,系统会自动调用AsyncTask一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()

71120

AsyncTask和Handler对比

1 ) AsyncTask实现原理,和适用优缺点 AsyncTask,是android提供轻量级异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行程度(可以通过接口实现...此方法在主线程执行,用于显示任务执行进度。 onPreExecute()        这里是最终用户调用Excute时接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。...UI thread中调用; 不要手动调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate...当中空间进行设置和修改 * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作 */ @Override protected...参数对应AsyncTask第二个参数 * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行 * onProgressUpdate

1.2K50

【Android 异步操作】AsyncTask 异步任务 ( 参数简介 | 方法简介 | 使用方法 | AsyncTask 源码分析 )

() 方法传入参数类型 ; 异步任务执行时 , 进度值类型 , onProgressUpdate() 方法传入参数类型 ; 异步任务结束时 , 结果类型 , onPostExecute() 方法传入参数类型...该方法在 子线程 中执行 ; onPreExecute() : 在 doInBackground() 执行前先执行方法 , 主线程 中执行 , 可更新 UI 界面 ; onProgressUpdate...构造函数源码解析 ---- AsyncTask 构造函数作用 : 创建一个新异步任务 , 该构造函数必须在 UI 主线程调用 ; 构造函数中做了三件事 : 获取 Handler : 该 Handler...FutureTask : FutureTask 是实现了 RunnableFuture 接口类 , 该接口中定义了一个 run() 方法 ; Callable 接口简介 : Callable 接口实现类定义一个没有参数...RunnableFuture 接口简介 : 该接口继承 Runnable 接口 , Future 接口 ; 在普通 Thread 方法中 , 调用线程 start() 方法 , 会执行 Thread

63600

AsyncTask源码分析

使用及封装实践,这一篇博客我们主要来讲解AsyncTask源码 ---- 这篇博客主要讲解以下内容 AsyncTask几个主要方法讲解 AsyncTask 源码分析 AsyncTask怎样使用自定义...Executor AsyncTask几个主要方法讲解 讲解之前我们先来回顾一下AsyncTask几个主要方法 Void onPreExecute() 在task 任务开始执行时候调用,在doInBackground...当我们调用 publishProgress()方法时候,会调用 onProgressUpdate()这个方法 Void onPostExecute(Result result) 在doInBackground...如果是finish或者running,会抛出异常,这也就是为什么AsyncTak只能被调用执行一次。...一个内部类 ,实现了Callable接口,在call方法里面会调用我们doInBackground方法,这也就是为什么我们doInBackground。

33100

android异步消息机制 从源码层面解析(2)

在此方法中可以通过调用publicProgress方法来更新任务进度,publicProgress会调用onProgressUpdate方法。...onProgressUpdate(Progress… values) 此方法在主线程中执行,values类型就是AsyncTask传入第二个参数类型,当后台任务执行进度发生变化时此方法执行。...在上面的案例中doInBackground方法里代码将会执行,当执行到publishProgress()方法时,会不断将进度信息传递给onProgressUpdate()方法(后面的分析中会解释为什么...publishProgress()执行能导致onProgressUpdate()方法调用),让此方法执行更新UI.执行到这里时,案例中下载界面如下,此时进度正好走到50%: ?...,onProgressUpdate方法 4.一个AsyncTask对象只能执行一次execute方法,否者会报运行时错误,在执行execute方法时,会调用到如下代码证明这个结论 if (mStatus

51121

Android查缺补漏(线程篇)-- AsyncTask使用及原理详细分析

AsyncTask对象必须在主线程中创建。 AsyncTaskexecute必须在主线程中调用。...接着在执行任务前先调用了onPreExecute方法,并将参数赋值给mWorker参数数组,然后使用exec执行在AsyncTask初始化阶段封装好mFuture。...SerialExecutorexecute方法首先会将FutureTask任务加入到mTasks队列中,此时如果没有正在活动任务就会调用scheduleNext执行下一个AsyncTask任务。...在调用AsyncTaskexecutor方法开始执行异步任务时,会首先调用onPreExecute方法通知外界任务已经开始,接着使用线程池执行前面FutureTask任务。...前面所说这个FutureTask任务是在AsyncTask初始化时被封装好,在该任务中调用了doInBackground方法用于异步执行我们添加耗时任务,doInBackground方法执行完毕会通过

1.1K70

Android Handler机制13之AsyncTask源码解析

onProgressUpdate:在doInBackground调用publishProgress后被调用,工作在UI线程 onPostExecute:后台任务结束后被调用,工作在UI线程。...这个步骤内还可以调用publishProgress()方法发布一个或者多个进度单位。在调用onProgressUpdate()函数后,这个结果将在UI线程上更新。...onProgressUpdate()方法:在调用publishProgress()之后在UI线程上调用。具体执行时间不确定,该方法用于在后台计算异步任务,把具体进度显示在用户界面。...内存观察AsyncTask。保证所有回调调用都是同步,使得以下操作在没有显示同步情况下是安全。...onProgressUpdate(result.mData),这也就是为什么我们平时在异步线程调用publishProgress(Progress...)方法后,可以在主线程中onProgressUpdate

78510

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

前言 多线程应用在Android开发中是非常常见,常用方法主要有: 继承Thread类 实现Runnable接口 Handler AsyncTask HandlerThread 今天,我将献上一份...使用步骤 AsyncTask使用步骤有4个: 创建 AsyncTask 子类 & 根据需求实现核心方法 创建 AsyncTask子类实例对象(即 任务实例) 手动调用execute(()从而执行异步线程任务..... params) { ...// 自定义线程任务 // 可调用publishProgress()显示进度, 之后将执行onProgressUpdate...执行任务中,系统会自动调用AsyncTask一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()...执行任务中,系统会自动调用AsyncTask一系列方法:onPreExecute() 、doInBackground()、onProgressUpdate() 、onPostExecute()

1.2K30

Android查缺补漏(线程篇)-- AsyncTask使用及原理详细分析

AsyncTask对象必须在主线程中创建。 AsyncTaskexecute必须在主线程中调用。...接着在执行任务前先调用了onPreExecute方法,并将参数赋值给mWorker参数数组,然后使用exec执行在AsyncTask初始化阶段封装好mFuture。...SerialExecutorexecute方法首先会将FutureTask任务加入到mTasks队列中,此时如果没有正在活动任务就会调用scheduleNext执行下一个AsyncTask任务。...在调用AsyncTaskexecutor方法开始执行异步任务时,会首先调用onPreExecute方法通知外界任务已经开始,接着使用线程池执行前面FutureTask任务。...前面所说这个FutureTask任务是在AsyncTask初始化时被封装好,在该任务中调用了doInBackground方法用于异步执行我们添加耗时任务,doInBackground方法执行完毕会通过

52420

AsyncTask使用和源码解析

为什么这里特意强调一下执行线程呢?因为耗时操作处理是不能放在主线程中进行,否则会有 ANR 问题。后面的对每个方法源码分析过程中会详细讲为什么他们线程是这样。...,在onProgressUpdate()方法中显示当前下载进度,在onPostExecute()方法中来提示任务执行结果。...doInBackground调用 分析了这么多代码看到onPreExecute调用那么接下来正真的任务执行方法实在哪里调用呢?...onProgressUpdate方法调用 如果我们需要调用onProgressUpdateAsyncTask执行过程中对UI进行操作,那么只需要在doInBackground方法中调用publishProgress...AsyncTaskcancel 取消AsyncTask异步任务我们常用方法是调用AsyncTask.cancel(true);但这样真的结束我们正在执行异步任务么?

63320

android异步任务asyntask详解

4.onProgressUpdate(Progress... values),在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上...我们可以看到关键几个步骤方法都在其中,doInBackground(Params... params)是一个抽象方法,我们继承AsyncTask时必须覆写此方法;onPreExecute()、onProgressUpdate...一个抽象内部类实现对象实例,它实现了Callable接口call()方法,代码如下: private static abstract class WorkerRunnable...Params, Result>() {   //call方法被调用后,将设置优先级为后台级别,然后调用AsyncTaskdoInBackground方法 public Result call...:   //调用AsyncTask.onProgressUpdate方法                 result.mTask.onProgressUpdate(result.mData);

99080

Android AsyncTask 使用与分析

本文简单介绍Android中AsyncTask,并从源码角度分析它流程和特点。 AsyncTask有助于使用UI线程。...是一个在不用多线程和Handler情况下帮助类。AsyncTask适用于短时间操作(最多几秒)。...thread ID = 1 任务执行完毕 */ AsyncTask 使用泛型 AsyncTask使用3种泛型 Params 送去执行类型 Progress 后台计算进度类型 Result 后台计算结果...这一步用来执行耗时后台计算。 这个方法接受异步任务参数,返回最后任务结果。这一步可以调用publishProgress(Progress...)通知出去一个或多个进度。...源码简析 需要解决问题: AsyncTask是如何调用后台线程完成任务?线程是如何调度

52120
领券