android - 什么时候从 UI 线程本身发布到 UI 线程是可取的?

标签 android

我看过代码示例,其中将 Runnable 发布到 UI 线程,而我们大概已经在主 UI 线程上执行了。例如,here最佳答案建议发布可运行的。我知道这意味着 runnable 将被发布到消息队列的末尾,但我不确定在从 UI 线程本身发布它的上下文中这意味着什么。

似乎几乎任何东西都可以发布为可运行的,那么我们怎么知道什么时候必须发布?在什么情况下建议或要求这样做?

最佳答案

最重要的是,通过发布一个runnable,您可以等待排队的 UI 更改完成,以便 View 更新并处于空闲状态。

案例 1:您正试图在某些时候访问部分 View ,但它们尚不可用,例如。你想要在onCreate()中布局的尺寸,view已经初始化但是还没有测量或者绘制。在这种情况下,您希望在绘制并准备好 View 时执行代码。通过在 UI 线程上发布 runnable,您将延迟代码的执行,直到绘制并准备好该 View 。

案例 2: Android 中的许多 API 调用都会导致 view/layout 更改和重绘。例如。调用 notifyDataSetChanged() 将重绘列表项。 Android 不会立即绘制它,而是等待 UI 线程空闲(类似于在 UI 线程上发布可运行对象)。在这种情况下,如果您调用对列表执行某些操作的 method A,则返回的值可能不准确,因为更改的 View 尚未绘制或布局。在这种情况下,您发布一个 runnable,它在 UI 队列完成后执行(这基本上意味着已绘制更改的 View )

关于android - 什么时候从 UI 线程本身发布到 UI 线程是可取的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20695748/

相关文章:

android - 检测哪个应用已在android中启动

Android 下载管理器下载到外部可移动 SD 卡

java - 两次启动另一个 Activity 时,线程不更新 textview

android - MPAndroidChart BarChart xValues 问题

android.database.sqlite.SQLiteException : near "(": syntax error (code 1):

java - 搜索图标操作按钮未显示在操作栏中 - 无法访问搜索功能

java - 使用泛型方法创建不可变的基础

android - 如何将 CSS 应用于 Android 中的电子邮件正文?

java - 如何启动带有附加图像的电子邮件 Intent ?

android - 如何将 ParseObject 的 createdAt 日期获取为字符串?