0

メニューを使用してハンドラーにメッセージを送信したい。そして、ハンドラーはサーバーから更新するスレッドを開始しました。

ただし、アプリをテストしたときに、サーバーを閉じてメニューを押しました。メニューはメッセージを送信するだけなので、Androidアプリはメニューでブロックされます。そのため、UIがブロックされました。

これがコードです

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してこの新しいスレッドでメソッドを呼び出すには、invokeが必要です。

于 2012-04-19T03:34:22.367 に答える