这是我的用例:
该应用程序从登录屏幕开始。输入凭据并点击“登录”按钮。然后会出现一个进度对话框,等待下载一些内容。下载完东西后,您将进入新活动。您采取的具体活动取决于服务器响应。
这是我的问题:
如果您在此登录/下载过程中回家,在不久的将来某个时候您的下载将完成并将调用startActivity()
。 那么新活动将被推到前台,粗暴地打断用户。我开始下载之前无法启动活动,因为正如我之前提到的,我开始的活动取决于下载的结果。
我显然不想像这样打断用户。解决此问题的一种方法是在用户返回应用程序之前不要调用startActivity()
。我可以通过跟踪LoginActivity的onStop()
和onRestart()
来实现此目的。 但是我想知道,有什么方法可以在后台创建活动吗?这样用户就可以返回应用程序并准备好了...否则他将不得不等待创建新活动(可能需要一些时间,因为新活动 还必须下载并显示一些数据)。
更新 你猜怎么着?我撒了谎!我本可以发誓,开始这项活动导致它出现在前台,但我又回去测试它,问题神奇地消失了。我在1.6和2.0.1中进行了测试,两个操作系统都非常聪明,不会将后台任务带到前面。
答案 0 :(得分:2)
我怀疑你是在Service
进行下载的。如果是这样,Service
应在完成时创建Notification
,用户可以自行激活。 PendingIntent
将保留准确的Activity
。
当然,当Activity
仍然有效时,不应发布Notification
,因此当Service
处于有效状态时({1}},您应该提及Activity
{1}}),如果没有(在onResume()
中),如果它处于活动状态,该服务可以让您的活动开始正确的活动。
答案 1 :(得分:0)
我会考虑将数据的下载与活动分开,而不是Service
。这样,所有数据都可以在后台下载,而不管Activity
应该(或正在)显示。
然后,当用户返回应用程序时,应用程序可以根据是否已下载正确的数据来选择(onResume
)要显示的Activity
。
如果完成数据下载对于Notification
来说不够重要,那么这将是更可取的。