0

我想使用菜单向处理程序发送消息。并且处理程序启动了一个线程以从服务器进行更新。

但是,当我测试我的应用程序时,我关闭了服务器并按下了菜单。android 应用程序在菜单中被阻止,这不应该发生,因为菜单只是发送一条消息。因此我的用户界面被阻止了。

这是代码

final Handler messageHandler = new Handler() {
    public void handleMessage(Message msg) {

        switch (msg.arg2) {
        case 0:
            int total = msg.arg1;
            progressDialog.setProgress(total);
            if (total >= progressDialog.getMax()) {
                // 取消Dialog并且置0
                dismissDialog(PROGRESS_DIALOG);
                progressDialog.setProgress(0);
                Toast.makeText(CardProcessView.this, "下载完成",
                        Toast.LENGTH_SHORT).show();
                initData();
            }
            break;
        case 1:
            updatabase();
            break;
        }

    }
};


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case 0:
        Message message = new Message();
        message.arg2 = 1;
        messageHandler.sendMessage(message);
        break;
    default:
        Log.d("update", "未更新");
    }
    return true;
}


protected void updatabase() {

    new Thread(updateRunable ).run();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add("更新操作向导");
    return true;
}

我找不到我的答案。谢谢大家。

4

1 回答 1

0

你需要改变:

new Thread(updateRunable ).run();

至:

new Thread(updateRunable ).start();

thread.run()只需调用线程的run方法,不要在新线程中启动该方法,您需要调用thread.start()来创建一个线程并run在这个新线程中调用方法。

于 2012-04-19T03:34:22.367 回答