我有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 :(得分:1)
您的代码是正确的,当您启动第二个线程第二个线程启动时,在第二个线程中您有编写代码来启动第一个线程。
First Thread启动速度非常快,因此您将无法看到正在下载文本,并且突然显示初始化。
尝试在第二个帖子中使用Log.e("TAG", "Downloading);
,这样你就会知道实际发生了什么。