2010-03-17 71 views
0

这是我的用例:
该应用程序从登录屏幕开始。您输入您的凭据并点击“登录”按钮。然后出现一个进度对话框,你等待一些东西下载。一旦这些东西下载完毕,你就会被带到一个新的活动中。具体到哪个活动取决于服务器响应。我可以在没有任务进入前台的情况下为特定任务创建活动吗?

这里是我的问题:
如果在此登录/下载过程回家,在不久的将来,您的下载将完成一些点,并且将调用startActivity()那么新的活动将被推到前台,粗暴地中断用户。在我开始下载之前,我无法启动活动,因为正如我前面提到的那样,我开始的活动取决于下载的结果。

我显然不喜欢像这样打断用户。解决这个问题的一个方法是避免调用startActivity(),直到用户返回到应用程序。我可以通过跟踪LoginActivity的onStop()onRestart()来做到这一点。 但我想知道,有没有什么办法可以在后台创建活动?这样用户返回到应用程序,他准备去...否则他将不得不等待新的活动创建(这可能需要一些时间,因为新的活动必须下载和显示一些数据)。

更新: 猜猜是什么?我撒了谎!我可以发誓说,开始这项活动正在使它前来,但我又回过头来再次测试,问题已经神奇地消失了。我在1.6和2.0.1都测试过,两个操作系统都足够聪明,不会把后台任务带到前台。

回答

2

我怀疑你在Service下载。如果是这样,Service应该创建一个Notification完成后,用户可以激活自己。 PendingIntent将持有确切的Activity开始。

当然,当Activity仍然有效,没有Notification应张贴,所以你应该提到你Service当你Activity处于活动状态(在onResume()),当没有(在onPause()),如果是活动的,服务可以让你的活动开始正确的活动。

+0

我不使用服务,它只是一个简单的'AsyncTask'。让用户从通知开始活动与开始活动后返回到应用程序的活动相同。所以它不能很好地解决我的问题,但通知可能是一个很好的奖励,所以感谢这个想法。 – 2010-03-17 19:07:57

+0

那么,如果你希望用户能够关闭该活动,同时仍然在下载,我想你应该使用一个'服务'的下载! – MrSnowflake 2010-03-19 10:24:42

0

我会看看保持下载的数据与活动分开,而不是在Service。这样,所有的数据都可以在后台下载,无论Activity应该(或正在显示)。

然后,当用户返回应用程序时,应用程序可以根据是否已下载正确的数据,选择(在onResume)显示哪个Activity

如果完成数据下载对于Notification来说不够重要,那么这将是优选的。

+0

谢谢,但这与手头的问题确实没有任何关系。此下载在单独的线程中发生,因此它不会减慢用户界面,并且后台活动不会影响下载。对于这个用例来说服务是不合适的;这不是一个很长的下载,只是用户可能会去其他地方。 – 2010-03-17 19:12:20

+0

我意识到这并没有直接回答你的问题,但我认为它提供了一个有效的选择。我认为你可以这样想:如果你想让事情发生在后台,可以通过“服务”来完成。 “活动”应该仅仅依靠在前景中做些事情。我不相信你可以在后台开始一个“活动”。在这种情况下,当用户返回到应用程序时,您必须启动新的“活动”。 – bdls 2010-03-18 00:05:49

相关问题