【问题标题】:ProgressBar using AsyncTask and working on GoogleMap objectProgressBar 使用 AsyncTask 并处理 GoogleMap 对象
【发布时间】:2015-06-12 05:40:48
【问题描述】:

我使用 AsyncTask 从 db 中检索数据(在 doOnBackground() 中),并准备将其显示给用户。在这些操作过程中,ProgressBar 完美地旋转。

当我需要对对象GoogleMap进行操作绘制折线、标记等时,所有这些工作都由onPostExecute()完成,ProgressBar停止旋转。

有一种方法可以在“GoogleMap”上操作并让 ProgressBar 旋转,以便通知用户该应用正在运行吗?

谢谢

【问题讨论】:

  • 在 AsyncTask 的 onPreExecute() 方法中显示 ProgressDialog 并在 onPostExecute() 中完成对话框.. 在 doInBackground() 中完成所有任务..
  • 我可以从 doOnBackground() 对 GoogleMap 对象进行操作而不违反“不要从 UI 线程外部访问 Android UI 工具包”的规则吗?
  • 你的错误是什么?你卡在哪里了?
  • @Heshan Sandeepa 没有错误,我在问是否有办法在 ProgressBar 继续旋转的同时更新 GoogleMap 对象(需要几秒钟的更新)。

标签: android android-asynctask progress-bar google-maps-android-api-2


【解决方案1】:

定义一个本地 Progress 类,它可以保存地图更新所需的所有信息。然后就可以一一发布进度,在onProgressUpdate中更新地图。 OnProgressUpdate 不仅限于更新进度条。

【讨论】:

  • 我试过了,但是没有用,因为在 doOnBackground() 中有一个 For{} cicle 来添加所有的折线、标记,......并且每次它调用 onProgressUpdate() ,这需要一些时间来更新对象 GoogleMap,同时 doOnBackground() 中的 For{} cicle 继续运行。最后,我在对象 GoogleMap 中只有很少的更新。
  • 啊,我明白了。我认为您可以在 doOnBackground 中保存一个同步队列,在其中推送信息。然后将此队列传递给 onProgressUpdate(使用本地 Progress 类)。如果您使用 BlockingQueue,请确保不要尝试从 UI 线程中的空队列进行轮询!
  • 我尝试过这样的事情,每次我调用 publishProgress() (因为 doOnBackground 中的 for cicle 前进了 1 步)我将布尔检查设置为 false,所以 doOnBackground 中的 cicle 不能去直到此检查为真。当 onProgressUpdate() 完成它的工作时是真的。它可以工作,但不是很好,因为它需要 80 秒以上的 mw 而不是一些秒计算。遗憾。现在我使用阻止旋转(或不需要旋转的消息)。
  • 你为什么停在doOnBackground?这样,您当然是在序列化这两个任务,并且两次都会总结。对于并发工作,doOnBackground 方法应该不断地推入队列并发布它,而 onProgressUpdate 应该从队列中拉出并绘制它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
相关资源
最近更新 更多