Android 非UI线程是否可以更新UI
2017-12-13 21:30
441 查看
正常思考,一般来说,Android中的UI更新是在主线程(UI线程)中,在非UI线程中是不可以进行更新的。
原因是这个主线程负责向UI组件分发事件(包括绘制事件),你的应用和Android的UI组件(components from the Android UI toolkit (components from the android.widget and android.view packages))也在其中发生交互,在非UI线程中是没有这个功能,如果必须在非UI中无处理更新UI会导致线程阻塞,并且是不安全的.
一般来说,这样不行。那就有特殊情况,就是SurfaceView。
SurfaceView是存在于独立UI线程中的拥有surface(表面)的canvas,它会独立的不影响主线程性能完成复杂的View的绘制。
所以我们的结论是:
正常情况下UI更新是在UI线程中进行的,非UI线程是不可以的;
特殊情况下SurfaceView是一个特例。
原因是这个主线程负责向UI组件分发事件(包括绘制事件),你的应用和Android的UI组件(components from the Android UI toolkit (components from the android.widget and android.view packages))也在其中发生交互,在非UI线程中是没有这个功能,如果必须在非UI中无处理更新UI会导致线程阻塞,并且是不安全的.
一般来说,这样不行。那就有特殊情况,就是SurfaceView。
SurfaceView是存在于独立UI线程中的拥有surface(表面)的canvas,它会独立的不影响主线程性能完成复杂的View的绘制。
所以我们的结论是:
正常情况下UI更新是在UI线程中进行的,非UI线程是不可以的;
特殊情况下SurfaceView是一个特例。
相关文章推荐
- Android Handler.post 难道真的可以在子线程更新UI???
- android中子线程可以更新UI,是真的吗?
- android 为什么可以在子线程更新UI
- 子线程是否可以更新UI
- Android多线程基础 子线程更新UI
- Android子线程中更新UI的三种方法和获取message的两种方法总结
- android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- Android中更新UI的线程:Thread 、Handler 、Loopper 、TimerTask等
- Code Fragment-Android在其他线程可以使用方法在UI线程执行UI相关
- android 线程更新UI(实例)
- Android获取SD卡上的APK文件,并且判断是否安装过、是否可以更新到新版本的工具类
- Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
- Android非UI线程更新UI的几种方法
- 为什么我们可以在非UI线程中更新UI
- 老问题:Android子线程中更新UI的3种方法
- Android线程模型解析(包括UI的更新)
- android 在非UI线程更新UI仍然成功原因深入剖析
- Android的线程使用来更新UI------Thread Handler Looper TimerTask等
- Android获取SD卡上的APK文件,并且判断是否安装过、是否可以更新到新版本的工具类