我是靠谱客的博主 心灵美蜜蜂,最近开发中收集的这篇文章主要介绍android 子线程更新UI,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 为啥android子线程不可更新UI?
我们可以想象下多线程更新UI会出现什么场景。比如多线程对一个view同时设置位置,那么到界面的显示上用户可能就会看到这个view在界面上上下左右的闪现,晃眼啊。
2. 什么情况下子线程可以更新UI?
我们先看下子线程更新UI的报错在这里插入图片描述
这是在子线程中更新TextView的内容,可以看出报错是在调用view的requestLayout之后发生的,说明可能是控件位置变化后导致检查线程问题,那布局未变化的情况下能否更新UI呢?
答案是可以的。
为了不改变控件的位置,我们将TextView的宽度设置为match_parent,这时如果在子线程中修改TextView的内容,只要内容不会导致换行是可以修改成功的,因此子线程中修改UI,只要不会触发view的requestLayout方法是可以修改UI的。

还一种情况下也可以修改UI,就是在Activity的onResume之前进行修改。因为检查线程方法是通过ViewRootImpl实现的,而ViewRootImpl在onResume时才创建。
参考:[https://www.cnblogs.com/billshen/p/13328680.html]

子线程中可以使用补间动画,因为补间动画并没有实际改变控件位置。

UI还涉及到dialog和toast,而子线程想要使用dialog和toast,需要启用looper,因为dialog和toast的需要通过handler才能正常运行,大家可通过查看源码了解一下。
3. 子线程更新UI的几种方式。
runonuithread
view.post
handler

最后

以上就是心灵美蜜蜂为你收集整理的android 子线程更新UI的全部内容,希望文章能够帮你解决android 子线程更新UI所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部