【发布时间】:2016-11-24 13:26:35
【问题描述】:
当我在后台线程中进行一些处理并想使用 runOnUiThread() 更新 UI 时,函数内的代码运行成功且没有任何错误,但只有在用户触摸屏幕时才会呈现 UI。否则,它会一直呈现。
为什么只有触屏后才渲染?
【问题讨论】:
-
在渲染时,您的 Activity 会进入 onPause 吗?
标签: android android-runonuithread
当我在后台线程中进行一些处理并想使用 runOnUiThread() 更新 UI 时,函数内的代码运行成功且没有任何错误,但只有在用户触摸屏幕时才会呈现 UI。否则,它会一直呈现。
为什么只有触屏后才渲染?
【问题讨论】:
标签: android android-runonuithread
如果您的屏幕被另一个屏幕重叠,这是可能的。这导致 Activity 移动到暂停状态 (.onPause()) 方法。当你再次触摸它时,它再次变为前景,因此可以接收 UI 更新事件
【讨论】:
有可能某个操作正在阻塞(例如过于频繁地通知适配器)您的 ui 线程并在发生中断时被解除阻塞。在您的场景中,触摸屏幕是一种中断。
如果您粘贴您的代码,也许我们可以找到一个确切的解决方案。
编辑:使用 RxJava 去抖动示例代码
yourSearchObservable
.throttleLast(100, TimeUnit.MILLISECONDS)
.debounce(200, TimeUnit.MILLISECONDS)
.onBackpressureLatest()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
searchResults -> {
// Your success
} ,
() -> {
// Error
}
));
【讨论】:
尝试使用回调或 android.os.Handler.post() 与主线程交互
【讨论】: