java - Android:在其他线程中操作UI控件,但是

标签 java android

beginButton.setOnClickListener(new Button.OnClickListener() {
    @Override
    public void onClick(View v) {
        PlayThread playThread = new PlayThread();
        Thread thread = new Thread(playThread);

        thread.start();
    }
});

public class PlayThread implements Runnable {
    @Override
    public void run() {
        beginButton.setClickable(false);
        pauseButton.setClickable(true);
        messageBool = true;
        int maxProgressBar = playProgressBar.getMax();
        int currentInt = playProgressBar.getProgress();

        for(; currentInt <= maxProgressBar; ++currentInt)
        {
            if(messageBool == false)
            {
                break;
            }
            playProgressBar.incrementProgressBy(1);
            try {
                Thread.sleep(400);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        if(currentInt > maxProgressBar)
        {
            playProgressBar.setProgress(0);
            beginButton.setClickable(true);
            pauseButton.setClickable(false);
        }
    }
};

大家好。这段代码有什么问题吗?我知道我们不能在除UI线程之外的其他线程中操作UI的控件。但是这段代码运行OK。那么有什么问题或者我错过了什么吗? 提前致谢!

最佳答案

如果您不以需要在屏幕上重新绘制的方式修改View,那么您就是安全的。 setClickable 仅修改其属性之一,例如,如果您要设置文本或修改该 ViewLayoutParams,该操作将使 View 无效,将会出现可怕的异常 Touched from the error thread...etc

ProgressBar 是线程安全的,可以在任何线程中使用。

关于java - Android:在其他线程中操作UI控件,但是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11662254/

相关文章:

java - 如何捕获 JDBC 中的特定异常?

java - 可能的 Android 项目依赖于其他(非库)Android 项目吗?

android - 潜望镜评论动画

java - 使用可从资源中绘制的位图初始化位图变量不起作用 - 使用 ANDROID

java - 如何删除标题 View ?或者修复这个异常: "Cannot add header view to list - setAdapter has already been called"

android - 获取 "Caused by: java.lang.VerifyError:"

android - Jetpack compose 中的 AppCompatActivity 而不是 ComponentActivity

android actionbar oncreateoptionsmenu 未调用

java - "if (rs.next())"是什么意思?

java - 使用开放式办公室 API 生成报告时出现 BootstrapException