在执行代码之前完成更新UI

时间:2014-04-08 13:46:16

标签: android multithreading user-interface

我有一个对话框,我正在更改其中的一些视图文字。之后,我创建了一个新线程并运行自己的代码。但是我的对话框的用户界面不会得到更新。它一直等到线程中的代码完成。我想更新对话框的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的线程?

1 个答案:

答案 0 :(得分:1)

当然可以。仔细观察:您正在手动执行Thread.run(),因此它在创建线程对象[UI线程,即阻塞]的同一线程上运行。 .run()无法启动新主题,.start()执行:)

有关此主题的更多信息,请访问:http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html