android - 在 doInBackground() 中访问视图是不好的做法吗?
问题描述
将 UI 元素(例如 a TextView
、 )传递给AsyncTask.doInBackground()
(通过AsyncTask.execute()
)并从后台线程中的视图中读取字段是不好的做法吗?(我知道从后台线程更改 GUI 元素是不行的。)
解决方案
这不是很好,原因很简单,您不知道该小部件是否有任何好处。
假设发生以下情况:
- 您执行了
AsyncTask
,但它卡在了其他任务后面并且没有立即运行 - 用户旋转屏幕,或按下 BACK,或以其他方式破坏活动
- 您
AsyncTask
终于开始运行并尝试访问此小部件
在最好的情况下,小部件完全是错误的。在最坏的情况下,无论您调用什么都会导致某种崩溃,因为托管活动被破坏了。
AsyncTask
本身已经相当过时了;现代 Android 开发使用其他东西(LiveData
RxJava 和 Kotlin 协程是最大的候选者)。但是,如果您希望使用AsyncTask
,请确保它不会尝试从 引用活动或其小部件doInBackground()
。
推荐阅读
- xamarin - Xamarin Android:java.exe 退出,代码 2 - 启用了 MultiDex
- excel - .Add2 生成运行时错误“438”:对象在 Excel VBA 中不支持此属性或方法
- javascript - 节点用户模型获取类型错误:无法设置未定义的属性“getUserId”
- php - PHP in_array( 0, ['aaa', 'bbb'] ) 返回 TRUE?
- dart - Rxdart 包与 google_sign_in 或 flutter_facebook_login 一起使用时会导致 Flutter 应用程序在启动时崩溃
- angular - 使用http时的角度6未定义函数
- xamarin.android - 命名空间无法正确解析 Android.Support.V4.App.ListFragment
- android - 侦听器仅将列表中的最后一个图像添加到 RecyclerView
- angular - 如何在 Angular 测试中强制关闭 mat-dialog?
- python - 按周 python 的时间序列组