我看过代码示例,其中将 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/