java - 字母代码在java/android中首先执行

标签 java android

if(b){ 
    mgr.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),0);
    tv.setText("Right!");
    check.setClickable(false);
    check.setVisibility(View.INVISIBLE);
    safe.setBackgroundResource(R.drawable.safe_opened);

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    finish();
}

如果我是对的,此 Activity 将从上到下执行代码(隐藏键盘、禁用按钮等)。

但是,当我在手机上运行这个应用程序时,它会等待 1000 毫秒,然后将文本设置为 “Right!”、更改背景等等。

我认为代码是自下而上执行的。我搜索了答案,但没有找到任何答案。为什么会出现这种情况?

最佳答案

是的,它确实从上到下运行,但这里的问题是当 UI 尝试刷新它并设置文本“Right!”时对于 TextView,您要求 UI 线程 hibernate 1000 毫秒。在那段时间你不会看到任何渲染。所有渲染或 UI 更改都在此之后发生。这不像您执行 tv.setText("Right!");safe.setBackgroundResource(R.drawable.safe_opened); 它会立即发生。这些东西迫使 UI 重新渲染自己,这需要一点时间(对人类来说可以忽略不计)。在 Framework 刷新 UI 之前,您要求它等待,这导致延迟将这些更改应用到您要求的 UI。

注意:强制 UI 线程 hibernate 绝不是一个好主意。如果您需要等待一些操作然后应用更改,您应该使用 ThreadHandler 或者可以根据需要使用 AsyncTask

关于java - 字母代码在java/android中首先执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35573313/

相关文章:

java - 无法使用相邻项目中添加的 .java 文件编译 Gradle 项目

java - 如何在 Android 中获取两个日期(开始和结束)之间的特定日期列表?

android - 如何使用 JWT 为 Android 应用程序实现刷新 token 流程

android - 查看是否启用了省电模式 - Android SDK

java - 返回可能已设置的实例时,DeferredResult 是否存在竞争条件?

java - 吃、睡和呼吸单元测试/TDD/BDD

android - 将 BaseGameUtils 导入到 Android Studio

android - 从通知创建的活​​动返回主 Activity

java - 如何用java从另一台服务器读取文件?

JavaFX FXML 对话框 - 无法使用 X 按钮关闭它