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

从Handler调用的AsyncTask不会执行doInBackground

从Handler调用的AsyncTask不会执行doInBackground方法,这是因为AsyncTask已经被弃用,不推荐使用。建议使用其他方法来实现异步任务,例如使用线程池、线程、协程等方法。

AsyncTask是一个用于在后台线程中执行异步任务的类,它允许在后台线程中执行耗时操作,并在主线程中更新UI。但是,由于AsyncTask存在一些问题,例如内存泄漏、线程池的限制等,它已经被弃用,不推荐使用。

如果您需要在后台线程中执行异步任务,建议使用线程池、线程、协程等方法。线程池可以帮助您更有效地管理线程资源,线程可以让您在后台线程中执行任务,而协程可以让您更轻松地实现异步任务。

例如,使用线程池来执行异步任务:

代码语言:java
复制
ExecutorService executorService = Executors.newFixedThreadPool(10);
executorService.execute(new Runnable() {
    @Override
    public void run() {
        // 在后台线程中执行任务
    }
});

使用线程来执行异步任务:

代码语言:java
复制
new Thread(new Runnable() {
    @Override
    public void run() {
        // 在后台线程中执行任务
    }
}).start();

使用协程来执行异步任务:

代码语言:kotlin
复制
GlobalScope.launch(Dispatchers.IO) {
    // 在后台线程中执行任务
}

总之,AsyncTask已经被弃用,不推荐使用。建议使用其他方法来实现异步任务,例如使用线程池、线程、协程等方法。

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

相关·内容

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

(String... params) { return null; } /** * 当异步任务被取消时执行此方法,此时将不会调用onPostExecute方法...这是因为在AsyncTask中存在这个一个静态类型Handler对象成员,在AsyncTask被加载时,该静态类型Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送在主线程中...AsyncTask对象必须在主线程中创建。 AsyncTaskexecute必须在主线程中调用。...:" + (i / (float)taskSize) * 100 + "%"; } /** * 当异步任务被取消时执行此方法,此时将不会调用onPostExecute方法...前面所说这个FutureTask任务是在AsyncTask初始化时被封装好,在该任务中调用doInBackground方法用于异步执行我们添加耗时任务,doInBackground方法执行完毕会通过

55930

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

(String... params) { return null; } /** * 当异步任务被取消时执行此方法,此时将不会调用onPostExecute方法...这是因为在AsyncTask中存在这个一个静态类型Handler对象成员,在AsyncTask被加载时,该静态类型Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送在主线程中...AsyncTask对象必须在主线程中创建。 AsyncTaskexecute必须在主线程中调用。...:" + (i / (float)taskSize) * 100 + "%"; } /** * 当异步任务被取消时执行此方法,此时将不会调用onPostExecute方法...前面所说这个FutureTask任务是在AsyncTask初始化时被封装好,在该任务中调用doInBackground方法用于异步执行我们添加耗时任务,doInBackground方法执行完毕会通过

56420
  • Android 多线程几种方式

    ()参数类型 注意点 AsyncTask使用过程中需要注意地方不少: 1) 由于Handler需要和主线程交互,而Handler又是内置于AsnycTask中,所以,AsyncTask创建必须在主线程...2) AsyncTaskdoInBackground(mParams)方法执行异步任务运行在子线程中,其他方法运行在主线程中,可以操作UI组件。...3) 不要手动调用AsyncTaskonPreExecute, doInBackground, onProgressUpdate, onPostExecute方法,这些都是由Android系统自动调用一个任务...4) 运行中可以随时调用cancel(boolean)方法取消任务,如果成功调用isCancelled()会返回true,并且不会执行onPostExecute() 方法了,取而代之调用 onCancelled...而且源码看,如果这个任务已经执行了这个时候调用cancel是不会真正把task结束,而是继续执行,只不过改变执行之后回调方法是onPostExecute还是onCancelled。

    81120

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

    (String... params) { return null; } /** * 当异步任务被取消时执行此方法,此时将不会调用onPostExecute方法...这是因为在AsyncTask中存在这个一个静态类型Handler对象成员,在AsyncTask被加载时,该静态类型Handler对象就会被初始化,所以这就要求了首次访问AsyncTask要发送在主线程中...AsyncTask对象必须在主线程中创建。 AsyncTaskexecute必须在主线程中调用。...:" + (i / (float)taskSize) * 100 + "%"; } /** * 当异步任务被取消时执行此方法,此时将不会调用onPostExecute方法...前面所说这个FutureTask任务是在AsyncTask初始化时被封装好,在该任务中调用doInBackground方法用于异步执行我们添加耗时任务,doInBackground方法执行完毕会通过

    1.1K70

    AsyncTask解析

    AsyncTask核心方法 onPreExecute() 该方法会在后台任务开始执行调用,并在 主线程执行。用于进行一些界面上初始化操作,比如显示一个进度条对话框等。...onPostExecute(Result) 当 doInBackground(Params...)执行完毕,并通过 return进行返回时,这个方法就会马上被调用。...还提供了 onCancelled()方法,该方法运行在 主线程,当异步任务取消时,该方法就会被调用,这个时候 onPostExecute(Result)就不会调用。...在mWorker call()方法中,会调用 doInBackground()执行耗时任务,并将执行结果通过 postResult(result)传递给内部Handler跳转到主线程中。...AsyncTask串行和并行: 源码可以看出,默认情况下AsyncTask执行效果是 串行,因为使用 SerialExecutor类来保证队列串行。

    58610

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

    () : 调用 publishProgress() 回调方法 , 主线程 中执行 , 可更新 UI 界面 ; onPostExecute() : doInBackground() 执行完毕后再执行方法...---- AsyncTask 构造函数作用 : 创建一个新异步任务 , 该构造函数必须在 UI 主线程调用 ; 构造函数中做了三件事 : 获取 Handler : 该 Handler 是主线程 Handler...doInBackground() 方法输入参数类型 Result 是返回值类型 , 也是 AsyncTask doInBackground() 方法执行完毕返回值类型 RunnableFuture..., 但是方法执行结果我们是不知道 ; 而在 AsyncTask 异步任务中 , 执行 doInBackground() 方法 , 该方法也是在子线程中执行 , 可以得到该方法执行结果 ,...() 方法中 : 执行 postResultIfNotInvoked 方法 : 如果没有被调用 , 那么传递结果 ; 执行 postResult() 方法 : 在该方法中使用主线程 Handler

    67500

    【Android开发进阶系列】多线程专题

    本质上说,它还是依赖于以Handler、Looper、MessageQueue、Message为基础异步消息处理机制。相对于新建Handler进行处理更加便捷。...5.1.2 AsyncTask核心方法 ** onPreExecute()**         这个方法会在后台任务开始执行之间调用,在主线程执行。...还提供了onCancelled()方法,它同样在主线程中执行,当异步任务取消时,onCancelled()会被调用,这个时候onPostExecute()则不会调用,但是要注意是,AsyncTask...mWorker中call()方法执行了耗时操作,即result = doInBackground(mParams);,然后把执行得到结果通过postResult(result);,传递给内部Handler...到此为止,任务执行开始到结束都从源码分析完了。

    42130

    Android Handler机制13之AsyncTask源码解析

    ,就需要直接Android异步消息处理机制,前面我写了很多文章源码层面分析了Android异步消息Handler处理机制。...doInBackground() 方法在 onPreExecute()执行完成后调用doInBackground()这个方法用于执行可能需要很长时间首台计算。异步任务参数被传递到这个步骤中。...android 3.0开始,每个任务都是执行在一个独立线程上,这样可以避免一些并行执行引起常见应用程序错误。...mTask参数:是为了AsyncTask是方便在handlerhandlerMessage回调中方便调用AsyncTask本身回调函数,比如onPostExecute()函数、onPreogressUpdata...,Android DONUT 开始,模式变更为通过线程池多任务并行执行

    80710

    Android中AsyncTask入门使用学习指南

    ,我们可以放在AsyncTaskdoInBackground方法中执行,这个抽象类,有几个方法需要我们重新,除了doInBackground,我们可以在onPreExecute中为这个耗时方法进行一些预处理操作...AsyncTask 源码简析 这里我们AsyncTask起点开始分析,主要有 execute() 、executeOnExecutor() 。...cancel()则执行onCancelled回调;正常执行情况下调用我们onPostExecute(result);主要这里调用是在handlerhandleMessage中,所以是在UI线程中...,加上长度为10阻塞队列,可能会觉得就是在快速调用138个以内AsyncTask子类execute方法不会出现问题,而大于138则会抛出异常。...然后第二个任务入队,但是此时mActive并不为null,并不会执行scheduleNext();所以如果第一个任务比较慢,10个任务都会进入队列等待;真正执行下一个任务时机是,线程池执行完成第一个任务以后

    41910

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

    doInBackground(Params… params) 此方法在子线程中执行,用于执行异步任务,注意这里params就是AsyncTask第一个参数类型。...onPostExecute(Result result) 此方法在主线程中执行,在doInBackground方法执行完成以后此方法会被调用,其中result类型就是AsyncTask传入第三个参数类型.../ditu.jpg"); new MyAsyncTask().execute(url); 源码分析 首先我们AsyncTask构造方法着手。...整个流程结束 总结 1.AsyncTask对象只能在主线程中创建 2.execute()方法只能在UI线程执行 3.不要在程序中直接调用onPreExecute,onPostExecute,doInBackground...AsyncTask活动,就会调用scheduleNext();执行下一个任务,当一个任务执行完成后又会执行下一个,从这可以看出AsyncTask默认是串行执行 以上就是本文全部内容,希望对大家学习有所帮助

    52721

    AsyncTask使用和源码解析

    AsyncTask 介绍 在Android中提起异步通信我们都会想到Handler,之前写过一篇文章又一年对Android消息机制(Handler&Looper)思考 。...doInBackground调用 分析了这么多代码看到onPreExecute调用那么接下来正真的任务执行方法实在哪里调用呢?...onProgressUpdate方法调用 如果我们需要调用onProgressUpdate在AsyncTask执行过程中对UI进行操作,那么只需要在doInBackground方法中调用publishProgress...AsyncTaskcancel 取消AsyncTask异步任务我们常用方法是调用AsyncTask.cancel(true);但这样真的结束我们正在执行异步任务么?...完全解析,带你源码角度彻底理解 该文章是对Android4.0AsyncTask源码分析。

    65120

    锦囊篇|一文摸懂AsyncTask

    return executeOnExecutor(sDefaultExecutor, params); } 进入执行第一句话,我们就能够看到这样一个函数,字面意思我就能够知道了,是将数据放入了一个线程池...这样也就证实了在很多博客中会说AsyncTask是一个由两个线程池和一个Handler组成调用顺序验证 前面讲过了execute()后面调用函数是onPreExecute()。...而接下来步骤就是doInBackground(),回到先前execute()代码中,我们知道会出现下面的代码 exec.execute(mFuture); // 上方操作调用函数 public...A1:其实这个问题一个方面和Handler同理,如果采用了UI线程中Looper作为消息暂存空间,那Activity被销毁时同样会因为消息没有没执行而发生内存泄漏。...,那么即便当Activity被销毁时,还在运行线程任务是不会被暂停,这也就是造成了内存泄漏第二个原因了。

    41620

    Asynctask那些事

    这些都是我们经常听到词汇了,最常用方法就是Thread+Handler方法,今天就来聊聊另一个熟悉Asynctask,或许你没有听过,别着急,通过本次(API23)源码进行讲解,你就明白了。...mStatus = Status.RUNNING;设置当前AsyncTask状态为RUNNING,上面的switch也可以看出,每个异步任务在完成前只能执行一次。...cancel(),则执行onCancelled回调; 正常执行情况下调用我们onPostExecute(result); 主要这里调用是在handlerhandleMessage中,所以是在UI...Handler身影存在。...,加上长度为128阻塞队列,可能会觉得就是在快速调用MAXIMUM_POOL_SIZE+128个以内AsyncTask子类execute方法不会出现问题,而大于MAXIMUM_POOL_SIZE+

    71171

    Android AsyncTask 使用与分析

    这个类能让你不主动使用多线程或Handler,在UI线程进行后台操作并发布结果。 是一个在不用多线程和Handler情况下帮助类。AsyncTask适用于短时间操作(最多几秒)。...doInBackground(Params...) onPreExecute()执行完毕后立即在后台线程中执行。这一步用来执行耗时后台计算。 这个方法接受异步任务参数,返回最后任务结果。...调用这个方法后,后台任务doInBackground(Object[])执行完毕后会调用onCancelled(Object)而不再是onPostExecute(Object)。...同一个异步任务实例只能被执行一次。重复执行同一个异步任务实例会抛出异常(IllegalStateException)。 源码简析 需要解决问题: AsyncTask是如何调用后台线程完成任务?...execute(Params... params)方法切入 先看方法execute(Params... params),使用默认执行器,并传入参数 调用xecuteOnExecutor(Executor

    54720

    Android基础总结(7)——异步消息处理

    此外,我们也不要被服务后台概念所迷惑,实际上服务并不会自动开启线程,所有的代码都是默认运行在主线程中。...对象,并通过HandlersendMessage()方法将消息发送出去; 之后这条消息会被添加到MessageQueue队列中等待被处理,而Looper则会一直尝试MessageQueue中取出带处理消息...上面介绍了AsyncTask基本应用,有些朋友也许会有疑惑,AsyncTask内部是怎么执行呢,它执行过程跟我们使用Handler又有什么区别呢?...介绍完大纲视图相关内容之后,接下来,我们会execute(Params... params)作为入口,重点分析一下AsyncTask执行流程,我们来看一下execute(Params... params...() { 6 //call方法被调用后,将设置优先级为后台级别,然后调用AsyncTaskdoInBackground方法 7

    76950

    详解Android 中AsyncTask 使用

    详解Android 中AsyncTask 使用 1、首先我们来看看AsyncTask 介绍: HandlerAsyncTask 都是android 中用来实现异步任务处理方式;其中:...Handler 实例向 UI 线程发送消息,完成界面更新, 优点:对整个过程控制比较精细; 缺点:代码相对臃肿,多个任务同时执行时,不易对线程进行精确控制; AsyncTask :比Handler...F、cancel(); : 取消一个正在执行任务,在UI线程中完成,用AsyncTask对象进行调用,参数为true/false; 4、使用AsyncTask 时注意事项: A、异步任务实例必须在...:String 对应AsyncTask 第三个参数,也就是 * 接收了 doInBackground() 返回结果; * 此方法在 doInBackground() 方法执行结束后执行,运行在...+result.getHeight()); } /** * 方法括号中Integer 对应AsyncTask第二个参数; * 在doInBackground() 中每次调用publishProgress

    1.1K20
    领券