我正在編寫一個Android應用程序,而且我的應用程序按預期運行,除非它長時間在後臺運行。幾個小時後我恢復應用程序時,它崩潰了。我已經等待了這段時間並觀察了LogCat中的響應,它在我的代碼中指向了一個空指針異常,但是在try catch(並且在catch中執行修正代碼)圍繞該區域的代碼之後,它仍然會在幾個小時後崩潰不活動。我的問題是,有沒有一種方法可以手動強制垃圾回收器(或任何Android O/S在我的應用程序運行幾個小時後在後臺運行),這樣我就可以高效地調試我的問題,而無需等待數小時自然發生?在此先感謝StackOverflow社區!Android應用程序開發 - 強制垃圾回收器
回答
System.gc()
會要求shedule垃圾收集器,但不會強制它。
調用垃圾收集器不會解決NullPointerException。
我建議嘗試調試,使用探查代替
我知道垃圾收集器不會解決問題,我試圖做的是導致應用程序崩潰,所以我可以看到Logcat確定需要做什麼來糾正它。如果我找不到讓它崩潰的方法,那麼我所能做的就是等待大約2個小時,並在後臺運行應用程序,然後在觀看logcat時恢復它。我已經在模擬器中嘗試了上面的「不要活動」選項,沒有運氣:( – Phil
模擬器與設備不相同 – 2013-07-13 01:14:26
@ user529543 - 你的假設是GC導致空指針,不能正確按設計, GC從不釋放一些仍然指向的東西,因此,你所要求的,不會幫助你 – ToolmakerSteve
問題你講的不一定是垃圾收集器;它是你的應用程序被卸載。我發現(迄今爲止)強制卸載進行測試的最佳方式是打開多個高內存應用程序。對於我而言,我加載優步,GMail,Chrome,雅虎幻想體育,Fitbit,Nook,谷歌地圖,Waze,Twitter,Runkeeper,The Weather Channel,然後我的應用程序將被卸載。有時我必須多次打開它們。我知道我的應用程序已通過檢查任務管理器(我有一個Galaxy Note 3)卸載。一旦我的應用程序不在那裏,然後我可以重新打開我的應用程序來測試。花2分鐘時間打開所有這些應用程序,但比等待幾個小時要好得多。
另外,感謝Simon對這個問題的評論,請嘗試'設置 - >開發人員設置 - >不要保留活動。 – ToolmakerSteve
- 1. 強制垃圾回收
- 2. Android遊戲開發和垃圾收集
- 3. .NET垃圾回收器
- 4. Java垃圾回收器
- 5. PhoneGap垃圾回收
- 6. 使用StrongLoop支持在Node.js應用程序中公開垃圾回收器
- 7. ColdFusion垃圾回收
- 8. PHP何時觸發垃圾回收器?
- 9. Android 2.3中的垃圾回收器
- 10. 我可以強制運行Java應用程序從控制檯垃圾收集
- 11. requestAnimationFrame垃圾回收
- 12. Java:垃圾回收
- 13. Chrome垃圾回收
- 14. 噓,垃圾回收器
- 15. C#垃圾回收
- 16. 如何驗證/強制課程被垃圾回收
- 17. 線程垃圾回收
- 18. Python線程垃圾回收
- 19. Erlang垃圾回收
- 20. Chrome垃圾回收器瘋狂
- 21. JS垃圾回收
- 22. 執行程序ThreadPool,垃圾回收
- 23. 循環和垃圾回收
- 24. 在我的應用程序中努力工作的Android垃圾回收器
- 25. JDBC垃圾回收
- 26. vb.net垃圾回收
- 27. c#和垃圾回收
- 28. java垃圾回收 - 暫停應用程序線程?
- 29. Parallel Copy垃圾回收器和Parallel Scavenge垃圾回收器的區別
- 30. 如何強制Android垃圾收集舊的套接字信息?
你可以發佈logcat和導致此錯誤的代碼嗎? – Elior
這不太可能成爲垃圾收集的問題。根據定義,如果您正在使用它們,垃圾收集將不會釋放分配給對象的內存。更可能的情況是,您在嘗試重新使用某個資源時未事先驗證該資源是否仍然存在 - 您是否緩存了一個易失性系統資源? – RivieraKid
另外 - 你是否確定你需要長時間在後臺運行?這樣做會對電池壽命產生負面影響,並對用戶體驗產生負面影響。 – RivieraKid