仅当进程很长时才显示ProgressDialog

时间:2015-02-28 12:48:18

标签: android progressdialog

我想知道如何在进程需要很长时间的情况下如何显示ProgressDialog

在我的情况下,程序可以与互联网配合使用,如果手机通过WiFi连接,那么就没有必要进行对话,因为它会闪烁半秒。反之亦然,当互联网缓慢需要向他们展示时。

我该怎么办?

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

1 个答案:

答案 0 :(得分:1)

这取决于您运行流程的方式。在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将是包含类的类变量。