Android的进度对话框不显示(Android Progress Dialog not showi

2019-10-16 20:06发布

这是处理程序,在主线程,这表明解散一条进度对话框。

public static final int SHOW = 0;
public static final int DISMISS = 1;
public Handler pdHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        Log.i(TAG, "+ handleMessage(msg:" + msg + ")");
        switch(msg.what) {
        case SHOW:
            pd = ProgressDialog.show(LogViewer.this, "", getText(R.string.loading_msg), true);
            break;
        case DISMISS:
            if(pd != null) {
                pd.dismiss();
                pd = null;
            }
            break;
        }
    }
};

显示进度的消息是:

        pdHandler.sendMessage(pdHandler.obtainMessage(SHOW));

将其关闭的消息是:

        pdHandler.sendMessage(pdHandler.obtainMessage(DISMISS));

它运作良好,当我打电话之前,我启动的AsyncTask的的AsyncTask onPostExecute()将其关闭。

但是,当它可运行(runOnUiThread)内运行,对话框不显示。 检查调试器上的PD变量,它显示了被创建,它正在运行,并且它是可见的,但在实践中是不可见的。

任何建议?

更新:
我做了明显的测试,我应该在第一时间做了。 我评论了解除消息。 和进度对话框并显示出来。 它似乎为时已晚,后可运行结束了。
我现在已了解了解除消息并驳回尚未可见ProgressDialog,这就是为什么我没有看到它。
现在的问题是:我需要的ProgressDialog显示之前执行的运行的代码。 而且它也不是那么简单的。 我调用层次是这样的:

onScrollEventChanged
    --> runOnUiThread ( 
        --> checkScrollLimits
            --> if need to scroll
                 show ProgressDialog "Loading"
                 get new data into table
                 dismiss ProgressDIalog
    )

我想是这样的:

onScrollEventChanged
    --> checkScrollLimits
        --> if need to scroll
             show ProgressDialog "Loading"
             --> runOnUiThread ( 
                 get new data into table
                 dismiss ProgressDIalog
             )

但仍是解除消息到达那里之前,ProgressDialog可以显示。

据的logcat存在SHOW消息的到达和解除消息的到达之间五秒的间隔。

更新二:
不过,我觉得我会用ProgressDIalog的isShowing()方法

pd = ProgressDialog.show(...)
while(!pd.isShowing());

不过,这并不在所有帮助,它返回true,即使对话没有显示呢。

Answer 1:

也许你不应该使用runOnUiThread()和更好的通过处理这Looper.prepare()函数:

什么是活套,以及如何使用它的目的是什么?

此外您AsyncTask完成后,可以运行在onPostExecute()那么你是在UI线程使一个附加runOnUiThread()是没有必要的。



Answer 2:

我认为它不会work.The从正在发送消息放置

pdHandler.sendMessage(pdHandler.obtainMessage(DISMISS));

你需要把所有那些沉重陈述或者工作到另一个非UI线程。 处理器是用来放一个消息到线程消息阙如果你的线程将忙那么它将以前的讯息话题后,执行该消息。 所以,因为你的UI繁重的工作该对话框中没有更新。 始终使用服务,为您的后台工作。 不要试图把一切都放在只有你的UI线程。

希望这将帮助你以其它方式使用的AsyncTask是做这样的事情的最好方法。 如果你仍然面临着同样的问题,然后发布从那里您发送邮件到处理程序代码。



Answer 3:

我把它转动代码到的AsyncTask和使用try / catch块工作。

见我的答案在这个岗位

我不知道,如果是的AsyncTask必要的,但之后,我曾经有过, 在try / catch块制成的差异。



文章来源: Android Progress Dialog not showing