0

将 UI 元素(例如 a TextView、 )传递给AsyncTask.doInBackground()(通过AsyncTask.execute())并从后台线程中的视图中读取字段是不好的做法吗?(我知道从后台线程更改 GUI 元素是不行的。)

4

1 回答 1

3

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

假设发生以下情况:

  • 您执行了AsyncTask,但它卡在了其他任务后面并且没有立即运行
  • 用户旋转屏幕,或按下 BACK,或以其他方式破坏活动
  • AsyncTask终于开始运行并尝试访问此小部件

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

AsyncTask本身已经相当过时了;现代 Android 开发使用其他东西(LiveDataRxJava 和 Kotlin 协程是最大的候选者)。但是,如果您希望使用AsyncTask,请确保它不会尝试从 引用活动或其小部件doInBackground()

于 2019-05-03T22:42:33.117 回答