如果从Timer Task调用,则根本不显示Android Dialog

时间:2011-03-13 20:27:02

标签: android multithreading timer dialog

timer = new Timer("Timer Thread");

    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
                showDialog(0);
                timeBar.setProgress(time);
            }
        }
    }, INTERVAL, INTERVAL);`

我的onCreateDialog方法工作正常,所以当我从Button使用showDialog(0)时它工作正常。但是如果调度程序调用该方法则不行。

2 个答案:

答案 0 :(得分:6)

使用处理程序:

protected static final int DIALOG_OK= 0;

timer = new Timer("Timer Thread");

timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
            mDialogHandler.sendEmptyMessage(DIALOG_OK);
            timeBar.setProgress(time);
        }
    }
}, INTERVAL, INTERVAL);

 private Handler mDialogHandler = new Handler(){
            public void handleMessage(android.os.Message msg) {
                    switch (msg.what) {
                    case DIALOG_OK:
                            // We are now back in the UI thread
                            showDialog(0);
                    }

            };
    };

这允许您从其他线程调用UI线程上的方法。需要更多解释,请问。

答案 1 :(得分:3)

您需要在UI线程上调用这些方法。

执行此操作的一种方法是通过AsyncTask,如this answer

另一种方法是创建Handler并从TimerTask向其发送消息。

您可以在Painless Threading中了解有关AsyncTasc和UI主题的更多信息。