【问题标题】:Is it bad practice to access a view in doInBackground()?在 doInBackground() 中访问视图是不好的做法吗?
【发布时间】:2019-05-03 22:35:39
【问题描述】:

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

【问题讨论】:

    标签: android android-asynctask android-threading


    【解决方案1】:

    这不是很好,原因很简单,你不知道那个小部件是否好用了。

    假设发生以下情况:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 2019-06-29
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多