我有一个对话框,我正在更改其中的一些视图文字。之后,我创建了一个新线程并运行自己的代码。但是我的对话框的用户界面不会得到更新。它一直等到线程中的代码完成。我想更新对话框的UI,然后在线程中运行代码。这是我的代码:
//在此代码之前很久就会初始化Dialog。此代码位于按钮的单击中。
formatBtn.setVisibility(View.GONE);
okBtn.setVisibility(View.GONE);
noUSBmsg.setText(R.string.formatting);
new Thread(new Runnable() {
@Override
public void run() {
try {
Process proc = Runtime.getRuntime().exec("su", null,null);
OutputStream os = proc.getOutputStream();
os.write(("mkfs.vfat /dev/block/sd*;").getBytes("ASCII"));
os.flush();
os.close();
proc.waitFor();
if (TransferData.CheckUSB()) {
Toast.makeText(DataTransferActivity.this,DataTransferActivity.this.getResources().getString(R.string.formatSuc),Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(DataTransferActivity.this,DataTransferActivity.this.getResources().getString(R.string.formatFail),Toast.LENGTH_SHORT).show();
}
noUsbDlg.dismiss();
} catch (Exception e) {
System.out.println("format disk: "+ e.toString());
}
}
}).run();
可能有些东西阻止了用户界面的线程。但我不明白。第二个代码块在不同的线程中运行。怎么可能阻止UI的线程?
答案 0 :(得分:1)
当然可以。仔细观察:您正在手动执行Thread.run()
,因此它在创建线程对象[UI线程,即阻塞]的同一线程上运行。 .run()
无法启动新主题,.start()
执行:)
有关此主题的更多信息,请访问:http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html