如果从计时器任务调用,Android 对话框根本不显示

发布于 2024-10-22 07:43:47 字数 373 浏览 1 评论 0原文

timer = new Timer("Timer Thread");

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

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

timer = new Timer("Timer Thread");

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

My onCreateDialog method is working fine, so when I use showDialog(0) from a Button it works fine. But not if the method is called by a Scheduler.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

阿楠 2024-10-29 07:43:47

使用处理程序:

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 线程上的方法。需要更多解释,就问吧。

Using a handler:

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);
                    }

            };
    };

This allows you to call method's on the UI thread from other threads. Need more explanation, just ask.

千纸鹤带着心事 2024-10-29 07:43:47

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

一种方法是通过 AsyncTask,如 这个答案

另一种方法是创建一个 Handler 并从您的应用程序向其发送消息定时器任务

您可以在 中阅读有关 AsyncTasc 和 UI 线程的更多信息无痛穿线

You need to call these methods on the UI thread.

One way to do this is via AsyncTask, as in this answer.

Another way is to create a Handler and send messages to it from your TimerTask.

You can read more about AsyncTasc and the UI thread in Painless Threading.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文