2017-07-26 20 views
1

输出I有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); 
    } 
} 

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

+0

您是否尝试首先显示初始化,然后下载?或者是周围的其他方式? – Abbas

+0

首先在主线程(活动)我开始下载 –

+0

这将是很好,如果你粘贴你的整个代码或'setDialogMessage'方法的定义问题的编辑.. –

回答

1

你的代码是正确的,当你开始第二个线程第二个线程启动并在第二个线程你写的代码开始第一线

第一个线程开始这么快,所以你将无法看到下载文字和初始化突然出现。

尝试在第二线程中使用Log.e("TAG", "Downloading);,以便您了解实际发生的情况。

+0

我看到总是下载。但有时我没有看到屏幕上的初始化(下载保留)。在日志中所有看起来像确定。 –

+0

下载 - 第一个线程,初始化 - 第二个线程。 –

+0

这意味着**您的用户界面会挂起**,因为您正在使用两种不同的线程,并且您正在访问相同的**对话框**。先尝试解散,然后重新开始对话。或者为每个线程使用两个单独的对话框。希望它能帮助你。 –