2

我是 android 编程新手,我有一个关于需要在后台执行长时间任务的问题。我有这个应用程序,它在活动 A 的列表视图中显示论坛主题列表,当用户单击此列表上的项目时,我需要在活动 B 中显示有关此项目的信息,其中包括一些文本和一些图像。

现在,这些信息是从网络上接收的。由于这是通信任务,我应该将它放在某种服务中,否则我可能会遇到 ANR。

我的问题是——在收到信息之前我该怎么做。由于在获取所有信息之前我无法显示活动 B,因此我必须在活动 A 中“挂起”,直到我从 Web 获取信息。

谁能指导我这种常见流程的正确设计模式?当然,一些代码也会很有帮助。

提前致谢。

4

4 回答 4

2

您可以查看 ASYNC TASK。浏览如何在列表视图中从 url 加载图像的示例。此类示例获取 json 格式的 url 并将其解析为数组列表并存储在 listview 中

于 2014-01-09T09:27:11.390 回答
2

当用户单击 Activity A 中的某个项目时,启动 Activity B。将参数传递到 Activity B 的 Intent 中,作为详细视图的主题。例如,活动 A 列出了行星。用户单击“Venus”并启动意图以使用参数“Venus”启动 Activity B。

然后活动 B 将启动一个 AsyncTask,它将向服务器查询您需要在活动 B 中显示的有关金星的所有信息。在查询期间,您可以显示一个进度条。之后,您完成解析来自服务器的 JSON 响应,使用您的 Venus 信息更新您的活动 B。

这是一个如何使用 AsyncTask 的示例的链接。按照我列出的示例,您将在onPreExecute. 然后,查询服务器doInBackground。然后使用您的 Venus 信息更新 Activity B 并将您的 ProgressBar 隐藏在onPostExecute.

于 2014-01-09T09:31:45.240 回答
2

您应该使用 android AsyncTask从服务器下载所有数据。您可以在用户等待时向他显示进度条。

您可以在我分享的链接上找到示例。

于 2014-01-09T09:32:29.240 回答
2

您应该以某种方式显示您的网络数据检索的进度。这实际上取决于您的 UI 设计。您可以在列表项上显示 ProgressDialog 或一些可旋转的可绘制对象。这也取决于您在此期间允许执行的操作,如果允许选择其他项目,那么这会增加额外的复杂性 - 因为您必须取消之前的下载,然后开始新的下载。

也可能发生服务器无法访问,连接可能需要 1 分钟,然后失败。也可能发生连接非常慢。在这种情况下,用户可能想要取消操作,方法是按下 GUI 上的某个按钮或按下后退按钮 - 如果您使用 ProgressDialog,这最后一个是有意义的。

其他解决方案是显示新的活动,详细信息应该出现在哪里,而不是显示大的旋转轮(intdeterminate progress drawable),按下返回将取消下载并返回到以前的活动/片段。

于 2014-01-09T09:34:11.270 回答