我有一个使用AsyncTasks来调用REST服务器的应用程序。
想象一下,在加载期间(这是AsyncTask转到REST服务器并将数据传送到下一个屏幕),用户按下Home。
建议:
或
您应该预见的最坏情况:
两者之后,用户返回应用程序......
答案 0 :(得分:6)
我会推荐应该使用AsyncTask来完成其工作的服务。服务会将您的活动与方向更改或用户退出隔离开来。 AsycnTask将从被阻止的UI线程中隔离。但确保在完成REST api后退出服务。
这将为您提供最佳选择。此外,如果您不使用DB作为本地缓存,那么您也可以尝试。因此,即使用户离开,服务也会将获取的数据存储在数据库中,当用户返回时,您可以快速显示屏幕。
编辑:只想添加IntentService很容易实现。尝试使用Design Patterns for REST clients on Android by Google进行更详尽的解释
答案 1 :(得分:3)
在配置更改期间使用AsyncTasks会变得非常混乱。根据个人经验,我建议改为使用IntentService / ResultReceiver路线。
有关详细信息,请参阅此帖子:
答案 2 :(得分:1)
我想您想知道的是从用户的角度来看哪种方式更好。根据我的经验,用户希望该应用程序在后台继续下载,因为如果他按下主页,他或者要么想要检查其中的其他应用程序,要么他无意中按下它并希望尽快返回到您的应用程序可能。如果用户想取消下载,他会正常按下后退按钮或特定按钮取消该应用程序屏幕上的某个位置。因此,当用户正常想要继续使用该应用时,您的应用更方便的行为是继续下载数据,并希望在他回到您的应用时已经将下载的数据显示给用户。
从技术角度来看,我不会使用服务。我只是让AsyncTask运行。在最糟糕的情况下,当应用程序在中间被杀时,应用程序会在用户返回应用程序时自动进入启动活动,因为应用程序无论如何都会重新启动。在asynctask失败的情况下,您可以检查数据是否已成功下载,如果未显示启动活动。您可以轻松地将下载的数据存储在一个初始值为null的变量中。如果变量在下载后仍为空,则AsyncTask失败,您必须进入启动活动。我认为这是一个非常强大的实现。
答案 3 :(得分:0)
继续下载,就像Android市场应用程序一样,但它会显示一个带有取消选项的通知。您可以使用下载服务来实现此目的。