java - 第二个线程没有输出消息

标签 java android multithreading

我有 2 个线程:

//Second Thread 
private class Init implements Runnable {

 public void run() {
  setTextMessage("Initialization");
  //Perform actions
 }

}
 //First Thread 
 private class Download implements Runnable {

  public void run() {
   setTextMessage("Downloading");
   //Perform actions
   Thread thread = new Thread(new Init());
   thread.start();

 }
}
  public void setTextMessage(final String textMessage) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (dialog != null) {
                setDialogMessage(textMessage);
            }
        }
    });
}

 //Add1
protected void setDialogMessage(Dialog dst, String text) {
    if (dst != null) {
        TextView progressTextDetails = (TextView) dst.findViewById(R.id.progressTextDetails);
        progressTextDetails.setText(text);
    }
}

理想情况下,在启动第二个线程后,我在屏幕上看到“初始化”而不是“正在下载”,并且执行第二个线程中定义的操作。但有时屏幕上的信息不会改变。虽然启动了第二个线程中定义的 Action 。在第二个线程中调用了setTextMessage 方法,但UI 线程中的文本并没有改变。为什么?

最佳答案

您的代码是正确的,当您启动第二个线程时,第二个线程将启动,并且在第二个线程中您已经编写代码来启动第一个线程

第一个线程启动得太快,您将看不到正在下载 文本,初始化 突然出现。

尝试在你的第二个线程中使用 Log.e("TAG", "Downloading"); 这样你就会知道实际发生了什么。

关于java - 第二个线程没有输出消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45323839/

相关文章:

android - 我可以向 Navigation Drawer 添加多个 ListView 吗?

c# - 如何在 IList 上使用锁

java - 椭圆曲线中的点乘

java - 如何使用@ConstructorResult注解

java - 如何在带注释的 UIThreadTest 方法中说 waitForIdleSync()

c# - 为什么我可以锁定 C# 中的任何对象类型?

multithreading - Goroutine 池是否像其他语言中的线程池一样有意义?

java - 使用最新的 JRE 而不是旧的 Java 版本,我能保证它会工作吗?

java - 获取与 jPasswordField 中的输入等效的字符串

android - 在多行 TextView 的 TextView 结束后放置按钮?