如果在主线程(也叫UI线程)中执行一些耗时操作,会出现ANR问题。为了避免ANR,需要将耗时操作,如网络请求啊、数据库操作啊、读取文件等等的操作,开启一个子线程来处理。
在耗时操作执行完毕后,直接在子线程中更新UI怎么样呢?
一般来说,会出现下面这个错误:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6891)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1048)
at android.view.View.requestLayout(View.java:19781)
at android.view.View.requestLayout(View.java:19781)
at android.view.View.requestLayout(View.java:19781)
at android.view.View.requestLayout(View.java:19781)
at android.view.View.requestLayout(View.java:19781)
at android.view.View.requestLayout(View.java:19781)
at androidx.constraintlayout.widget.ConstraintLayout.requestLayout(ConstraintLayout.java:3172)
at android.view.V