2013-07-12 93 views
-1

我正在編寫一個Android應用程序,而且我的應用程序按預期運行,除非它長時間在後臺運行。幾個小時後我恢復應用程序時,它崩潰了。我已經等待了這段時間並觀察了LogCat中的響應,它在我的代碼中指向了一個空指針異常,但是在try catch(並且在catch中執行修正代碼)圍繞該區域的代碼之後,它仍然會在幾個小時後崩潰不活動。我的問題是,有沒有一種方法可以手動強制垃圾回收器(或任何Android O/S在我的應用程序運行幾個小時後在後臺運行),這樣我就可以高效地調試我的問題,而無需等待數小時自然發生?在此先感謝StackOverflow社區!Android應用程序開發 - 強制垃圾回收器

+0

你可以發佈logcat和導致此錯誤的代碼嗎? – Elior

+0

這不太可能成爲垃圾收集的問題。根據定義,如果您正在使用它們,垃圾收集將不會釋放分配給對象的內存。更可能的情況是,您在嘗試重新使用某個資源時未事先驗證該資源是否仍然存在 - 您是否緩存了一個易失性系統資源? – RivieraKid

+1

另外 - 你是否確定你需要長時間在後臺運行?這樣做會對電池壽命產生負面影響,並對用戶體驗產生負面影響。 – RivieraKid

回答

3

System.gc()會要求shedule垃圾收集器,但不會強制它。

調用垃圾收集器不會解決NullPointerException。

我建議嘗試調試,使用探查代替

+1

我知道垃圾收集器不會解決問題,我試圖做的是導致應用程序崩潰,所以我可以看到Logcat確定需要做什麼來糾正它。如果我找不到讓它崩潰的方法,那麼我所能做的就是等待大約2個小時,並在後臺運行應用程序,然後在觀看logcat時恢復它。我已經在模擬器中嘗試了上面的「不要活動」選項,沒有運氣:( – Phil

+0

模擬器與設備不相同 – 2013-07-13 01:14:26

+0

@ user529543 - 你的假設是GC導致空指針,不能正確按設計, GC從不釋放一些仍然指向的東西,因此,你所要求的,不會幫助你 – ToolmakerSteve

2

問題你講的不一定是垃圾收集器;它是你的應用程序被卸載。我發現(迄今爲止)強制卸載進行測試的最佳方式是打開多個高內存應用程序。對於我而言,我加載優步,GMail,Chrome,雅虎幻想體育,Fitbit,Nook,谷歌地圖,Waze,Twitter,Runkeeper,The Weather Channel,然後我的應用程序將被卸載。有時我必須多次打開它們。我知道我的應用程序已通過檢查任務管理器(我有一個Galaxy Note 3)卸載。一旦我的應用程序不在那裏,然後我可以重新打開我的應用程序來測試。花2分鐘時間打開所有這些應用程序,但比等待幾個小時要好得多。

+0

另外,感謝Simon對這個問題的評論,請嘗試'設置 - >開發人員設置 - >不要保留活動。 – ToolmakerSteve