应用程序部分关闭

问题描述:

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

假设我在该屏幕上,并且通过单击ListFragment的其中一行来导航它。如果我然后点击一个空指针或任何其他导致常规强制关闭对话框弹出的异常,我会弹出对话框上的强制关闭按钮,并且我正在执行的活动确实会关闭,但我最终返回FragmentActivity屏幕,而不是说我的Android/Launcher主屏幕。

对我来说,这说的是应用程序崩溃,但不知何故碎片活动正在重新启动。如果我在eclipse中的调试视图中点击红色停止按钮,就会发生这种行为 - 当前活动被杀死,但该死的片段活动仍然存在。

很明显,我不希望我的应用程序得到一个强制关闭对话框,但真的我想弄明白,如果这是我没有正确编码的症状。目前我从来没有停止这项服务,主要是因为它在整个应用程序中一遍又一遍地被重复使用,而且我还没有开始编写一种安全关闭服务的方式,而不会过早地结束对它的新请求。

服务是否通过ListFragment和LoaderCallback或其他方式保持对Activity的引用?为什么这个FragmentActivity看起来不可战胜?

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

如果您想在强制关闭后删除堆栈中的所有活动,可以执行的操作之一是点击后退按钮,直到您进入主屏幕。除非您重写应用程序中后退按钮的行为,否则它会销毁当前的活动并将您引导至上一个活动。一旦没有更多的活动,你将被带到主屏幕,并可以从日食再次启动你的应用程序,它会在你的主要活动中启动你。

+0

啊我想我明白了,谢谢! –

+0

如果这完全回答您的问题,请标记为已接受 – Craigy

我遇到了类似的问题,数据库加载和空指针异常。我不知道你的特殊情况,但是如果你还没有这样做,将数据库分离成一个内容提供者可能会有所帮助,这样你就可以将数据库的碎片更多地分离出来,这可能有助于解决错误。

+0

感谢您的回复,但我想你误解了我的问题。我没有问题与空指针或其他例外。我只是想知道为什么当我搞砸了,为什么我的应用程序没有完全关闭。我担心我的服务会自动重启我的活动或类似的事情。 –