0

当我在后台线程中进行一些处理并想使用 runOnUiThread() 更新 UI 时,函数内部的代码运行成功,没有任何错误,但只有当用户触摸屏幕时才会呈现 UI。否则,它会持续渲染。

为什么只有触摸屏幕后才渲染?

4

3 回答 3

2

如果您的屏幕被另一个屏幕重叠,这是可能的。这导致 Activity 移动到暂停状态 (.onPause()) 方法。当您再次触摸它时,它再次变为前景,因此可以接收 UI 更新事件

于 2016-11-24T13:32:40.647 回答
2

一个操作可能会阻塞(例如过于频繁地通知适配器)您的 ui 线程并在发生中断时被解除阻塞。触摸屏幕是您的场景中的一个中断。

如果您粘贴您的代码,也许我们可以找到一个确切的解决方案。

编辑:使用 RxJava 去抖动示例代码

          yourSearchObservable
            .throttleLast(100, TimeUnit.MILLISECONDS)
            .debounce(200, TimeUnit.MILLISECONDS)
            .onBackpressureLatest()
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    searchResults -> {
                        // Your success

                   } ,
                    () -> {
                        // Error
                    }
            ));
于 2016-11-24T15:05:57.200 回答
1

尝试使用回调或 android.os.Handler.post() 与主线程交互

于 2016-11-24T13:44:22.573 回答