我遇到无法找到原因的问题。
我有一个配置多个设备的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,为什么会发生这种情况?
我建议不要使用AsyncTask,因为它已被弃用。 AsyncTask有很多与之相关的问题,其中之一是回调。
还有更好的问题可以解决后台工作或并发工作。
对于Java-使用执行程序或处理程序。对于Kotlin-使用协程。
同时使用RxJava。