【发布时间】:2019-05-03 22:35:39
【问题描述】:
将 UI 元素(例如 TextView)传递给 AsyncTask.doInBackground()(通过 AsyncTask.execute())并从后台线程的视图中读取字段是不好的做法吗? (我知道从后台线程更改 GUI 元素是不行的。)
【问题讨论】:
标签: android android-asynctask android-threading
将 UI 元素(例如 TextView)传递给 AsyncTask.doInBackground()(通过 AsyncTask.execute())并从后台线程的视图中读取字段是不好的做法吗? (我知道从后台线程更改 GUI 元素是不行的。)
【问题讨论】:
标签: android android-asynctask android-threading
这不是很好,原因很简单,你不知道那个小部件是否好用了。
假设发生以下情况:
AsyncTask,但它卡在其他任务后面,没有立即运行AsyncTask 终于开始运行,您尝试访问此小部件在最好的情况下,小部件完全是错误的。在最坏的情况下,无论你调用什么都会导致某种崩溃,因为托管活动被破坏了。
AsyncTask 本身已经过时了;现代 Android 开发使用其他东西(LiveData、RxJava 和 Kotlin 协程是最大的候选者)。但是,如果您希望使用AsyncTask,请确保它不会尝试从doInBackground() 引用活动或其小部件。
【讨论】: