Android:runOnUiThread无法正常工作,如果用户触摸了屏幕

时间:2016-11-24 13:26:35

标签: android android-runonuithread

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

为什么只有在触摸屏幕后进行渲染?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

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

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

                   } ,
                    () -> {
                        // Error
                    }
            ));

答案 2 :(得分:1)

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