0

我试图ProgressDialog在用户界面上显示五秒钟以阻止 UI,以便我的 locationClient 可以在五秒钟后连接。

我正在关闭对话框。但对话框根本不显示,手机屏幕变黑 3-4 秒。发生这种情况是因为我正在运行此代码UiThread吗?如果是的话,我可以按照他们的任何其他方法停止 5 秒钟,然后执行待处理的代码。

我的线程代码如下:

public void startConnecting(final boolean isSearchWarnings) {
        mProgressDialog = ProgressDialog.show(this, "Please wait","Long operation starts...", true);
        MainActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <= 5; i++) {
                    try {
                        if (mLocationClient.isConnected()) {
                            break;

                        } else {
                            Thread.sleep(1000);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
                mProgressDialog.dismiss();
                if (isSearchWarnings) {
                    new getWarnings().execute(false);
                } else {
                    new getWarnings().execute(true);
                }
            }
        });

    }
4

1 回答 1

4

你有这个

   MainActivity.this.runOnUiThread(new Runnable()

接着

   Thread.sleep(1000);

您正在 ui 线程上调用 sleep 。这会阻塞你不应该做的 ui 线程。你会得到 ANR。

http://developer.android.com/training/articles/perf-anr.html

如果你想造成延迟使用handler

在不使用线程的情况下延迟几秒钟

于 2013-09-11T13:28:39.893 回答