在doInBackground()中访问视图是不好的做法吗?

时间:2019-05-03 22:35:40

标签: android android-asynctask android-threading

TextView之类的UI元素(通过AsyncTask.execute()传递给AsyncTask.doInBackground()并从视图中 read 字段是一种不好的做法在后台线程? (我知道不能从后台线程更改GUI元素。)

1 个答案:

答案 0 :(得分:3)

这不是很好,原因很简单,您不知道该小部件是否有用。

假设发生以下情况:

  • 您执行了AsyncTask,但是它滞留在其他任务之后,无法立即运行
  • 用户旋转屏幕,或按BACK,或以其他方式破坏活动
  • 您的AsyncTask终于开始运行,您尝试访问此小部件

在最佳情况下,小部件完全是错误的。在最坏的情况下,无论调用什么,都会导致某种崩溃,因为托管活动已被破坏。

AsyncTask本身已经过时了;现代的Android开发使用了其他功能({x {1}},RxJava和Kotlin协程是最大的候选者)。但是,如果您希望使用LiveData,请确保它不会尝试引用AsyncTask中的活动或其窗口小部件。