仅在流程较长时显示 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 变量。
我想知道如何仅在处理需要很长时间的情况下才显示 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 变量。