【问题标题】:Showing Loading screen during REST service request in android app?在android应用程序的REST服务请求期间显示加载屏幕?
【发布时间】:2011-02-18 06:55:57
【问题描述】:

目前这是我正在关注的, 一旦我的应用程序启动,我必须发送一个 REST 服务请求, 这将花费一些时间,所以我想到了显示加载屏幕,

在我的 Activity 的onCreate() 中,首先要显示加载屏幕(进度对话框), 然后我使用 AsyncTask 启动后台 Activity,即请求 REST 服务和 onPostexecute() 我关闭对话框,然后执行 setContentView(myxml); 并更新 UI。

这种方法可以改进吗?

我遇到的问题是,

有时,垃圾收集器可能会启动(由于各种原因)并且我的应用程序永远挂在加载屏幕上,因为垃圾收集器,甚至没有发送对 REST 服务的请求,因此一些唤醒呼叫来了,休息是灾难并强制关闭。

但有时甚至 ForceClose 也不会很快,可能是因为 GC。所以我什至无法返回并停留在加载屏幕中。那时我唯一能做的就是回家。之后,如果我回到我的应用程序,它仍在加载,所以这种方法肯定是一个糟糕的设计。什么是正确的方法?

【问题讨论】:

  • 我不认为这完全是坏事。我的意思是没有编码的例子很难说。但是,只要您正确处理 onCreate() 和 onDestroy() 以在设备的方向发生更改时正确处理,这似乎很合理。 ForceClose 不应该因为 GC 而发生。确保在其余服务调用上设置超时,以确保 onPostExecute 可以实际发生并且不会耗尽整个线程池。

标签: android android-widget android-layout android-lazyloading


【解决方案1】:

如果您预计 REST 调用会花费大量时间,也许您还应该考虑使用服务而不是异步任务。为什么?因为在每次方向更改时,您的活动都将被销毁,并且将再次创建新的异步任务,因此 REST 调用从一开始就再次完成。另一方面,在使用服务时,您可以发出一次 REST 调用,并且只跟踪它在活动中的状态(这需要您正确处理 onPause、onCreate 函数)。

我怀疑您的问题与垃圾收集器有关 - 在强制关闭后检查您的堆栈跟踪并尝试了解实际发生的情况。一定是你做错了什么……

【讨论】:

  • 您可以使用 Application 类并在那里引用 AsyncTask,然后您就不必考虑方向更改。看看这个问题 --> stackoverflow.com/questions/4584015/…
  • 正如“Google I/O 2010 - Android REST 客户端应用程序”中所建议的,服务是 REST 应用程序的首选方式。当然,没有人可以强迫您这样做,但这是使用服务的另一个原因。在所有情况下,包括具有 Application 类的情况,您都需要注意方向更改,至少要在方向更改后跟踪异步任务的状态,还要重新出现某种进度对话框等等。简单来说,没有什么灵丹妙药,遇到这种情况需要注意几件事。
  • 如果我解决了问题的一部分,这很愚蠢,我无法从加载屏幕返回,因为我没有在进度对话框中使用 setCancellable 为 true 并且没有听 onCancelListener,我想这仅适用于我们有按钮的情况,所以现在返回可以正常工作,关于 GC,我必须指出问题是否真的是因为这个。谢谢大家。
【解决方案2】:

你可以像我 done here 那样实现一个启动画面

这基本上是启动一个显示初始图像的异步任务,在 doInBackground() 第 51 行执行工作,然后转发到下一个活动。

【讨论】:

  • 去看看,谢谢。
【解决方案3】:

您是否观看了视频 Google I/O 2010 - Android REST 客户端应用程序? 在页面http://developer.android.com/videos/index.html

【讨论】:

  • 是的,我已经看到了。但在这种情况下,请帮帮我。
猜你喜欢
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 2015-03-17
  • 1970-01-01
相关资源
最近更新 更多