gpt4 book ai didi

android - ProgressDialog 只显示一瞬间

转载 作者:太空狗 更新时间:2023-10-29 13:37:00 25 4
gpt4 key购买 nike

编辑:这与 ProgressDialog doesn't show just flashes 不同

我确保使用 AsyncTasks 进行网络通信和文件操作,显示一个不确定的、可取消的 ProgressDialog,直到任务完成,我觉得我应该这样做。

在某些情况下——移动互联网连接速度较慢,旧设备功率不足——这可能需要几秒钟。但是在其他情况下或在其他设备上,完全相同的任务可能会非常快速地完成,导致 ProgressDialog 仅显示一小部分,基本上在屏幕上闪烁。

此处的最佳做法是什么?我可以想到几个选项:

  1. 保持原样,因为知道某些用户会有这种闪烁效果。
  2. 强制 ProgressDialog 在消失之前保持可见最短时间(半秒、一秒),即使任务已经完成也是如此——但我讨厌引入人为延迟的想法。
  3. 为任务计时,仅当任务花费的时间超过最小设定时间(例如半秒)时才显示 ProgressDialog。问题是这不是真正的解决方案;如果任务花费的时间不到那么长,那就太好了;如果任务需要很长时间,那很好——但如果最短时间为 0.5 秒,而任务实际需要 0.7 秒,那么你又会遇到同样的问题……短暂的闪烁。
  4. 如果您可以监控任务的进度,对其进行简单测试并估计,从第一分之一秒或前 x% 开始,完成任务需要多长时间;如果预计需要一段时间,则显示 ProgressDialog。但这会非常复杂,并非每个后台任务都适合这种进度估算。

什么是最好的方法?有没有我错过的选项?有没有办法设置 ProgressDialog 以便它只显示是否会有明显的延迟? (我怀疑是否存在,但如果有某种神奇的方法就好了)。其中之一是“标准”解决方案吗?

最佳答案

Force the ProgressDialog to stay visible for a minimum length of time (half a second, a second) before it disappears, even if the task has already completed--but I hate the idea of introducing artificial delays.

与让进度对话框在屏幕上短暂闪烁相比,这是一个更好的解决方案。从用户的角度来看,它引入了一致性。如果它有时出现,而其他时候没有出现,则似乎有什么地方工作不正常。

我向我的异步任务添加了一个长变量,并在预执行时将其设置为 System.nanoTime()。然后在执行后我计算经过了多少时间并将其与设定的最短时间进行比较。如果它在那个时间量以下,我在剩余时间使用 wait() 。目前我将它设置为 1.5 秒延迟,以确保在进度对话框消失之前有足够的时间阅读它。

private final class SyncPendingOrders extends AsyncTask<String, Integer, String> {

long timer = 0;

@Override
protected void onPreExecute(){
timer = System.nanoTime();

pd = ProgressDialog.show(context,null,"Updating Pending Orders",true,false);
pd.setIndeterminateDrawable(context.getResources().getDrawable(R.anim.spinner));
}

@Override
protected String doInBackground(String... args) {

updatePendingOrders();

return null;
}

@Override
protected void onPostExecute(String me){

long clock = System.nanoTime()-timer - 2000000000;

if(clock > 0)
{
try{
wait(clock);
}catch(Throwable e){

}
}

PendingOrdersView();
pd.dismiss();
}

}

这样用户总是看到同一个方框并且知道程序在做什么。一致性是关键。

关于android - ProgressDialog 只显示一瞬间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com