调用完成后Android应用程序崩溃

时间:2017-09-22 21:43:42

标签: android android-asynctask

根据我的理解,这是我希望不会发生的事情。

在我的应用程序中,我执行()一个AsyncTask,可能需要不到2-3秒。在那个AsyncTask中,我有runOnUiThread(),它可以更新几个UI控件值。

如果我单击“注销”按钮执行活动的结束(),则此工作正常。

我得到Null指针异常,findViewById返回null。我可以在更新之前添加空检查,但考虑到UI屏幕和使用的AsyncTasks的数量,我最终将进行大量检查。

为什么在调用finish()之后UI线程仍然在执行?

这种情况的最佳解决方案是什么? 仅当与AsyncTask完成和调用finish()之间的时间差异完全一致时才会发生问题。

此致

2 个答案:

答案 0 :(得分:1)

AsyncTask在后台运行,直到它正在执行的作业完成,因此对当前活动调用“finish”并不会将其终止。 如你所说,添加空检查会很麻烦,所以我要做的就是在调用finish()之前取消asyncTask。

if (asyncTaskInstatnce != null && !a.isCancelled())
     a.cancel(true);

答案 1 :(得分:0)

使用AysncTask的onPostExecute方法更新UI。