我想知道如何在进程需要很长时间的情况下如何显示ProgressDialog
?
在我的情况下,程序可以与互联网配合使用,如果手机通过WiFi连接,那么就没有必要进行对话,因为它会闪烁半秒。反之亦然,当互联网缓慢需要向他们展示时。
我该怎么办?
if (process takes > 1 sec) -> ProgressDialog.show(...)
答案 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将是包含类的类变量。