2017-07-26 52 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

這意味着**您的用戶界面會掛起**,因爲您正在使用兩種不同的線程,並且您正在訪問相同的**對話框**。先嚐試解散,然後重新開始對話。或者爲每個線程使用兩個單獨的對話框。希望它能幫助你。 –