【发布时间】:2017-09-22 21:43:41
【问题描述】:
根据我的理解,这是我预计不会发生的事情。
在我的应用程序中,我执行()一个 AsyncTask 可能需要不到 2-3 秒的时间。在那个 AsyncTask 中,我运行了 runOnUiThread(),它更新了一些 UI 控件的值。
这工作正常,直到,如果我点击退出按钮,它会完成 Activity。
我得到空指针异常,findViewById 返回空值。我可以在更新之前添加空检查,但考虑到使用的 UI 屏幕和 AsyncTasks 的数量,我最终会进行大量检查。
为什么调用finish()后UI线程还在执行中?
这种情况的最佳解决方案是什么? 仅当 AsyncTask 完成和调用 finish() 之间的时间差完全一致时才会出现问题。
问候,
哈沙
【问题讨论】:
-
丹尼尔,这些门票中的信息似乎值得一试。我正在从不同的角度进行搜索。
-
丹尼尔,我还有一个后续问题。由于 runOnUiThread() 内的代码中出现问题,如果主线程(UI 线程)由于 finish() 而被 OS 取消,runOnUiThread() 试图寻找 UI 线程时会有任何异常吗?我不确定我该如何准确地测试它来验证。
-
@harshal 当你的 asyncTask 寻找一个它找不到的视图时自然会抛出一个 NullPointerException (因为你的活动已经完成,因此你的 UI 元素已经消失了)