根据我的理解,这是我期望不会发生的事情。
在我的应用程序中,我执行一个AsyncTask,它可能需要不到2-3秒。在这个AsyncTask中,我有runOnUiThread(),它更新的UI控件值很少。
这是很好的工作,直到,如果我做了一个点击退出按钮,做一个活动的完成()。
我得到了findViewById返回null的Null指针异常。我可以在更新之前添加null检查,但是考虑到UI屏幕和AsyncTasks使用的数量,我最终会得到大量的检查。
为什么在调用finish()之后UI线程仍在执行中?
这个案子的最佳解决方案是什么?只有当AsyncTask完成和调用finish()之间的时间差存在完全一致时,才会出现问题。
致以敬意,
哈尔沙
发布于 2017-09-22 22:04:24
AsyncTask在后台运行,直到它正在执行的作业完成为止,因此对当前活动调用"finish“不会扼杀它。添加空检查将是一个麻烦,所以我要做的是在调用asyncTask之前取消finish()。
if (asyncTaskInstatnce != null && !a.isCancelled())
a.cancel(true);发布于 2017-09-22 23:23:41
您可以使用onPostExecute方法的AysncTask更新UI。
https://stackoverflow.com/questions/46373620
复制相似问题