java - 阻塞主线程

标签 java android multithreading blocking ui-thread

<分区>

我不明白为什么我的主 UI 线程被阻塞了。我有一个调用函数 doSomething() 的按钮。

    randomButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    doSomething();    
                }
    });
}

    // My private helper funtion

    private void doSomething() {

                Thread t1 = new Thread() {

                    @Override
                    public void run() {

                        long startTime = SystemClock.uptimeMillis();
                        Log.e(TAG, "Start Time = "+startTime);
                        while((SystemClock.uptimeMillis()-startTime)<6000){// Loop for 6 seconds
                            Log.e(TAG, "Diff ="+(SystemClock.uptimeMillis()-startTime));                        
                        }    
                    }    
                };
                t1.run();
        }

问题是当我按下按钮时,我的循环运行了多长时间(这里是 6 秒)它一直被按下。我希望它以这样一种方式出现,即使循环继续运行,用户仍然可以使用他的 UI 元素。这就是我创建新线程的原因。我做错了什么吗?

谢谢

最佳答案

您不调用 run 来启动线程。你调用 start()。调用run直接在当前线程调用run

关于java - 阻塞主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465512/

相关文章:

android - 如何获取原生 Android Editbox

java - 小数点正则表达式

java - 在 <ul> selenium 中获取 webelements 的正确方法

java - JPA/Hibernate - 多态多对一关系设计

java - 如何从 Android 中先前定义的字符串设置字符串?

java - 启动线程时程序崩溃

android - 使用 Firebase 服务器时间戳在 Android 上创建同步倒数计时器

java - Android - 如何使适配器布局保持原位

c++ - 类的一部分互斥

python - ArcGIS 中的多线程与 Python