【问题标题】:proper design when need to complete long task before going to next in Android在Android中进行下一步之前需要完成长时间任务时的正确设计
【发布时间】:2014-01-09 09:24:14
【问题描述】:

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

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

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

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

提前致谢。

【问题讨论】:

  • 我必须在活动 A 中“挂起”,直到我得到信息 - 不,你没有。您会立即显示活动 B 以及加载/进度指示器(如 ProgressBar),以显示已检索到数据。 一些代码也会很有帮助 - 先展示你的。

标签: android design-patterns service android-anr-dialog


【解决方案1】:

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

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

Here is a link to an example of how to use AsyncTask. 按照我列出的示例,您将在onPreExecute 中显示一个ProgressBar。然后查询doInBackground中的服务器。然后使用您的 Venus 信息更新 Activity B 并将您的 ProgressBar 隐藏在 onPostExecute 中。

【讨论】:

  • 谢谢大家。你很有帮助。我会选择 Mike 的建议,因为它最适合我的需要。再次感谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-03-13
        • 2020-12-05
        • 2021-05-05
        • 2017-08-07
        • 2019-04-08
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 1970-01-01
        相关资源
        最近更新 更多