【问题标题】:Blocking the main thread [duplicate]阻塞主线程[重复]
【发布时间】:2023-09-15 15:26:01
【问题描述】:

我不明白为什么我的主 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 元素。这就是我创建一个新线程的原因。我是不是做错了什么?

谢谢

【问题讨论】:

  • 你需要打电话给t1.start()而不是t1.run()

标签: java android multithreading blocking ui-thread


【解决方案1】:

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

【讨论】: