java - 如何知道 Android Java 线程何时完成其任务?

标签 java android multithreading

我已经在我的 Android 应用程序中启动了一个线程 - 使用 Java,如下所示

new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    try {
                        Log.d(TAG, "startThread: " + i);
                        if (i == 5) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    buttonStartThread.setText("50%");
                                }
                            });
                        }
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

当这样写时,我如何找到线程何时完成其任务。

最佳答案

最简单的方法是让 Runnable 在完成时调用某个方法,如下所示:

    for (int i = 0; i < 10; i++) {
        try {
            ...
        } catch (InterruptedException e) {
            ...
        }
    }
    // notify that I am done
    notifyThreadDone();

private void notifyThreadDone() {
    // Do whatever you want to do here
}

请注意,notifyThreadDone() 将在另一个线程 上调用,不会在主 (UI) 线程上调用。如果您想对 UI 元素执行某些操作(显示某些内容等),请确保通过将调用包装在 runOnUiThread() 中,在主 (UI) 线程上调用 notifyThreadDone() .

关于java - 如何知道 Android Java 线程何时完成其任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73122272/

相关文章:

java - 在一些字符串中分隔变量

c# - C#.NET 中的线程和跨线程,如何从另一个线程更改 ComboBox 数据?

java - 从本地主机发送电子邮件 - Play Framework

java - 了解 Java 热点 JIT 生成的用于 float 测试的代码

java - 随机生成对象

android - 从适用于 Android 的 FFMPEG 命令行版本访问网络摄像头麦克风

android - 错误: JSR/RET are not supported with computeFrames option

java - 如何将 "e1"字符替换为 "E",将 "e19"替换为 "M"?

java - 让线程在 Java 应用程序中无限期运行

java - 为什么invokeLater在主线程中执行?