将 UI 元素(例如 a TextView
、 )传递给AsyncTask.doInBackground()
(通过AsyncTask.execute()
)并从后台线程中的视图中读取字段是不好的做法吗?(我知道从后台线程更改 GUI 元素是不行的。)
问问题
51 次
1 回答
3
这不是很好,原因很简单,您不知道该小部件是否有任何好处。
假设发生以下情况:
- 您执行了
AsyncTask
,但它卡在了其他任务后面并且没有立即运行 - 用户旋转屏幕,或按下 BACK,或以其他方式破坏活动
- 您
AsyncTask
终于开始运行并尝试访问此小部件
在最好的情况下,小部件完全是错误的。在最坏的情况下,无论您调用什么都会导致某种崩溃,因为托管活动被破坏了。
AsyncTask
本身已经相当过时了;现代 Android 开发使用其他东西(LiveData
RxJava 和 Kotlin 协程是最大的候选者)。但是,如果您希望使用AsyncTask
,请确保它不会尝试从 引用活动或其小部件doInBackground()
。
于 2019-05-03T22:42:33.117 回答