Java 在安卓系统中,为什么有时候用户界面操作仍然有效,但在不使用runOnUithread的情况下非常滞后?

Java 在安卓系统中,为什么有时候用户界面操作仍然有效,但在不使用runOnUithread的情况下非常滞后?,java,android,Java,Android,我只是注意到,我能够在android中设置UI元素在不同于UI的线程上的可见性,而无需在runOnUiThread中运行它,但它非常滞后。对此有什么正式的解释吗?我一直认为它要么有效,要么根本不起作用 以下是runOnUiThread(MainActivity)中的代码: 这是runOnUiThread(主要活动)外的一个: 它将调用一个方法(PreferenceFragment): 尝试跟踪源代码,可能不使用handler.post()来更新视图我假设您谈论的是setVisibility,而不

我只是注意到,我能够在android中设置UI元素在不同于UI的线程上的可见性,而无需在runOnUiThread中运行它,但它非常滞后。对此有什么正式的解释吗?我一直认为它要么有效,要么根本不起作用

以下是runOnUiThread(MainActivity)中的代码:

这是runOnUiThread(主要活动)外的一个:

它将调用一个方法(PreferenceFragment):


尝试跟踪源代码,可能不使用handler.post()来更新视图我假设您谈论的是
setVisibility
,而不是
setVisibility
。正如@MickeyTin所说,您可以通过发布到
处理程序来更新视图,该处理程序将在UI线程上运行该方法。如果你没有在UI线程上运行方法,你就不能保证在主线程上有时间,因此主(UI)线程将运行,只要它有事情做-那么你可能有时间运行你的方法。。。但是,我很奇怪为什么在UI线程之外运行方法时没有出现异常。。。你能发布你的代码吗?是的,是setVisible,不是setVisible,我的错,我为你发布了代码:)
@Override
public void onDataWritten(final boolean success) {
    System.out.println("Written");
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            preferenceFragment.onWritten(success);
        }
    });
}
@Override
public void onDataWritten(final boolean success) {
    System.out.println("Written");
    preferenceFragment.onWritten(success);
}
public void onWritten(boolean completed){
    if(completed){
        sendingProgressBar.setVisibility(View.INVISIBLE);
    }
}