仅在耗时大于 500 毫秒时显示对话框

Display dialog only if consuming time bigger than 500 milliseconds

我在我的自定义 AsyncTask 中使用 ProgressDialog,加载对话框会在耗时的任务完成后显示和隐藏。有时候任务完成的很快,dialog就出现又消失,非常不利于用户体验,是否可以在耗时大于某个时间段,比如500毫秒才显示dialog?

public class MyTask extends AsyncTask<Void, String, Integer> {
 private ProgressDialog dialog;
 @Override
    protected void onPreExecute() {
        dialog = ProgressDialog.show(context, "", context.getString(R.string.loading) + "...");
    }


    @Override
    public Integer doInBackground(Void... params) {
       //time consuming task is here
    }


    @Override
    protected void onPostExecute(Integer code) {
        if (dialog != null) {
            dialog.dismiss();
        }

    }
  }

如有任何建议,我们将不胜感激。

您可以使用 Handler,在 500 毫秒后显示对话框。然后在 onPostExecute 中取消处理程序的 运行nables(如果它们尚未 运行)并隐藏对话框(如果已创建)。

这是一个例子:

public class MyTask extends AsyncTask<Void, String, Integer> {

    private ProgressDialog dialog;
    private Handler handler;

    @Override
    protected void onPreExecute() {
        handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                dialog = ProgressDialog.show(context, "",
                        context.getString(R.string.loading) + "...");
            }
        }, 500);
    }


    @Override
    public Integer doInBackground(Void... params) {
        //time consuming task is here
    }


    @Override
    protected void onPostExecute(Integer code) {
        // Remove all runnables from queue
        handler.removeCallbacksAndMessages(null);
        // Hide dialog if one exists
        if (dialog != null) {
            dialog.dismiss();
        }
    }
}

如果您无法知道需要多长时间并且不知道平均时间,我建议您不要按照@user3249477 的建议延迟对话,原因如下:

假设您的任务可能需要 0 到 5000 毫秒,并且几率是恒定的。你的任务在 500 毫秒之前完成的几率是 10%。您的任务在 500 毫秒到 1000 毫秒之间完成的机会也是 10%。在 500 毫秒无用后显示对话框以及它闪烁(立即消失)的机会与以前相同。

我的建议:了解平均时间,然后从那里开始。