2011-10-12 51 views
3

我正在使用服務和片段兼容包構建應用程序,並且遇到了一些奇怪的行爲。我有一個FragmentActivity和一個實現LoaderCallbacks的ListFragment,當FragmentActivity啓動時,它啓動一個服務來下載數據並填充數據庫。應用程序部分關閉

假設我在該屏幕上,並且通過單擊ListFragment的其中一行來導航它。如果我然後點擊一個空指針或任何其他導致常規強制關閉對話框彈出的異常,我會彈出對話框上的強制關閉按鈕,並且我正在執行的活動確實會關閉,但我最終返回FragmentActivity屏幕,而不是說我的Android/Launcher主屏幕。

對我來說,這說的是應用程序崩潰,但不知何故碎片活動正在重新啓動。如果我在eclipse中的調試視圖中點擊紅色停止按鈕,就會發生這種行爲 - 當前活動被殺死,但該死的片段活動仍然存在。

很明顯,我不希望我的應用程序得到一個強制關閉對話框,但真的我想弄明白,如果這是我沒有正確編碼的症狀。目前我從來沒有停止這項服務,主要是因爲它在整個應用程序中一遍又一遍地被重複使用,而且我還沒有開始編寫一種安全關閉服務的方式,而不會過早地結束對它的新請求。

服務是否通過ListFragment和LoaderCallback或其他方式保持對Activity的引用?爲什麼這個FragmentActivity看起來不可戰勝?

回答

2

發生這種情況是因爲您的進程已被終止,但活動堆棧中還有其他活動。這是預期的行爲,因爲一旦您的違規活動被移除,系統會嘗試在堆棧上的下一個活動中啓動新的進程。見herehere

如果您想在強制關閉後刪除堆棧中的所有活動,可以執行的操作之一是點擊後退按鈕,直到您進入主屏幕。除非您重寫應用程序中後退按鈕的行爲,否則它會銷燬當前的活動並將您引導至上一個活動。一旦沒有更多的活動,你將被帶到主屏幕,並可以從日食再次啓動你的應用程序,它會在你的主要活動中啓動你。

+0

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

+0

如果這完全回答您的問題,請標記爲已接受 – Craigy

0

我遇到了類似的問題,數據庫加載和空指針異常。我不知道你的特殊情況,但是如果你還沒有這樣做,將數據庫分離成一個內容提供者可能會有所幫助,這樣你就可以將數據庫的碎片更多地分離出來,這可能有助於解決錯誤。

+0

感謝您的回覆,但我想你誤解了我的問題。我沒有問題與空指針或其他例外。我只是想知道爲什麼當我搞砸了,爲什麼我的應用程序沒有完全關閉。我擔心我的服務會自動重啓我的活動或類似的事情。 –