应用部分关闭

时间:2011-10-12 20:47:10

标签: android android-service

我正在使用服务和片段兼容包构建应用程序,并且遇到了一些奇怪的行为。我有一个FragmentActivity和一个实现LoaderCallbacks的ListFragment,当FragmentActivity启动时,它启动一个服务来下载数据并填写一个数据库。

假设我在该屏幕上,并通过单击ListFragment的其中一行来浏览它。如果我然后点击一个nullpointer,或任何其他导致弹出常规强制关闭对话框的异常,我点击对话框上的强制关闭按钮,我正在进行的活动确实被关闭了,但我最终还是回来了FragmentActivity屏幕,而不是说我的Android /启动器主屏幕。

对我而言,这说明应用程序正在崩溃但不知何故片段活动正在重新启动。如果我在eclipse的调试视图中点击红色停止按钮会发生这种情况 - 当前的活动被杀死但该死的片段活动仍在那里。

显然我不希望我的应用程序获得强制关闭对话框,但实际上我想弄清楚的是,这是否是我没有正确编码的症状。目前我从不停止这项服务,主要是因为它在整个应用程序中被反复使用,而我还没有编写一种安全关闭服务的方法,而不会过早地结束对它的新请求。

服务是否通过ListFragment和LoaderCallback或其他东西保持对Activity的引用?为什么FragmentActivity看似无敌?

2 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您的进程已被终止,但活动堆栈上还有其他活动。这是预期的行为,因为一旦您的违规活动被删除,系统会尝试在堆栈上的下一个活动上启动新进程。请参阅herehere

如果你想在强制关闭后将所有活动从堆栈中删除,你可以做的一件事就是按下后退按钮,直到你进入主屏幕。除非您覆盖应用程序中后退按钮的行为,否则它会破坏您当前的活动并将您带到上一个活动。一旦没有剩下的活动,您将被带到主屏幕,并可以从eclipse再次启动您的应用程序,它将在您的主要活动中启动。

答案 1 :(得分:0)

我遇到了类似的问题,包括Databse加载和Nullpointer Exceptions。我不知道你的特殊情况,但如果你还没有这样做,可能有助于将数据库分离到内容提供程序中,这样你就可以将数据库中的碎片分离出来,这可能有助于解决错误。 / p>