Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中,当需要在进入下一步之前完成长任务时,进行适当的设计_Android_Design Patterns_Service_Android Anr Dialog - Fatal编程技术网

在Android中,当需要在进入下一步之前完成长任务时,进行适当的设计

在Android中,当需要在进入下一步之前完成长任务时,进行适当的设计,android,design-patterns,service,android-anr-dialog,Android,Design Patterns,Service,Android Anr Dialog,我刚接触安卓编程,我有一个关于在后台执行长任务的问题。 我有一个应用程序,它在活动a的listview中显示论坛主题列表,当用户单击此列表中的某个项目时,我需要在活动B中显示有关此项目的信息,其中包括一些文本和一些图像 现在,这些信息是从网络上收到的。由于这是一项通信任务,我应该把它放到某种服务中,否则我可能会遇到ANR 我的问题是——在收到信息之前我该怎么做。由于我无法在获取所有信息之前显示活动B,因此我必须“挂起”活动A,直到我从Web获取信息 有人能告诉我这种常见流程的正确设计模式吗?当然

我刚接触安卓编程,我有一个关于在后台执行长任务的问题。 我有一个应用程序,它在活动a的listview中显示论坛主题列表,当用户单击此列表中的某个项目时,我需要在活动B中显示有关此项目的信息,其中包括一些文本和一些图像

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

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

有人能告诉我这种常见流程的正确设计模式吗?当然,一些代码也会非常有用


提前感谢。

您可以查看异步任务。 浏览如何从listview中的url加载图像的示例。
此类示例获取json格式的url,并将其解析为数组列表并存储在listview中。当用户单击活动A中的项目时,启动活动B。将参数传递到活动B的意图中,使其成为详细视图的主题。例如,活动A列出了行星。用户单击“Venus”并启动一个意图,使用参数“Venus”启动活动B

活动B随后将启动一个AsyncTask,该任务将向服务器查询您需要在活动B中显示的有关Venus的所有信息。在查询过程中,您可以显示进度条。解析完来自服务器的JSON响应后,用Venus信息更新活动B

按照我列出的示例,您将在
onPreExecute
中显示一个进度条。然后,在
doInBackground
中查询服务器。然后用Venus信息更新活动B,并将进度条隐藏在
onPostExecute

中。您应该使用android从服务器下载所有数据。您可以在用户等待时向其显示一个条形图


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

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

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


另一个解决方案是显示新的活动,其中应显示详细信息,而不是显示大型旋转轮(可绘制Intdefinite progress),按back将取消下载并返回到以前的活动/片段。

我必须“挂起”活动A,直到我获得信息-不,您不需要。立即显示活动B以及加载/进度指示器(如
ProgressBar
),以显示已检索到数据。一些代码也会非常有用-首先展示你的代码。谢谢大家。你帮了大忙。我会选择迈克的建议,因为它最适合我的需要。再次感谢。