仅在流程较长时显示 ProgressDialog

Show ProgressDialog ONLY when process is long

我想知道如何仅在处理需要很长时间的情况下才显示 ProgressDialog

在我的例子中,程序适用于互联网,如果 phone 通过 WiFi 连接,则不需要 progressDialogs,因为它会闪烁半秒。反之亦然,当互联网速度较慢时,需要显示它们。

我该怎么做:

if (process takes > 1 sec) -> ProgressDialog.show(...)

这取决于您 运行 您的流程。在 AsyncTask 的情况下,只需在启动异步任务时启动一个计时器。然后在您的 doInBackground 中,您可以查询经过的时间,如果时间大于几秒,则调用 publishProgress。然后在 onProgressUpdate 中发布您的对话框。

如果您不使用异步任务,则必须针对以下方法进行调整。一般捕获开始时间,轮询查询当前时间,当你超过你的时间阈值时显示进度对话框。

 private class MyTask extends AsyncTask<FOO, FOO, FOO> {
 protected Long doInBackground(FOO... foo) {
     //Do normal operation
     long elapsedTime = System.currentTimeMillis();
     boolean showDialog = false;
     if (elapsedTime - startTime > TIME_THRESHOLD) {
        showDialog = true;
        publishProgress(0);
     }

     while( !showDialog ) {
        elapsedTime = System.currentTimeMillis();
        if (elapsedTime - startTime > TIME_THRESHOLD) {
          showDialog = true;
          publishProgress(0);
        }
     }
 }

 protected void onProgressUpdate(Integer... progress) {
     //Show dialog
 }

 protected void onPostExecute(Long result) {
     //Do whatever
 }
}
startTime = system.currentTimeMillis();
new MyTask().execute();

这是一个非常粗略的实现,时间检查可以改进,但应该给出如何使其工作的粗略概念。在这种情况下,startTime 将是包含 class 的 class 变量。