doInBackground返回null时不调用onPostExecute

问题描述 投票:-2回答:1

我遇到无法找到原因的问题。

我有一个配置多个设备的AsyncTask,但是在某些情况下,我必须中断配置并向用户显示存在问题的对话框。

在配置过程的最后,我调用return null并执行onPostExecute中的代码,但是当我遇到问题时,我将其称为“ break;”。离开配置过程并转到相同的“ return null”,则不会执行onPostExecute中的代码,这是代码:

 @Override
    protected Void doInBackground(Void... voids) {

        for (ScanResult neras :
                    nerasList) {

        // configuration process

while (server.getState(neras.SSID) == NerasState.NETWORK_TESTING) {
                Log.i("STATE", "" + server.getState(neras.SSID));
                if (this.isCancelled()) {
                    return null;
                }
                Log.i("TEMPO", "" + (System.currentTimeMillis() - startTime >= 120000));
                if (System.currentTimeMillis() - startTime >= 5000) {
                    isWifiWithProblem = true;
                    break;
                }

            }

            if(isWifiWithProblem) {
                break;
            }
        }
    return null;
    }

在上面的代码中,当所有for迭代结束并且代码都变为“ return null”时,onPostExecute会完美执行,但是当System.currentTimeMillis()-startTime> = 5000并且我中断for并调用相同代码时未执行“返回null” onPostExecute,为什么会发生这种情况?

android android-asynctask
1个回答
-1
投票

我建议不要使用AsyncTask,因为它已被弃用。 AsyncTask有很多与之相关的问题,其中之一是回调。

还有更好的问题可以解决后台工作或并发工作。

对于Java-使用执行程序或处理程序。对于Kotlin-使用协程。

同时使用RxJava。

© www.soinside.com 2019 - 2024. All rights reserved.