2011-07-14 69 views
8

有没有办法“清理”您创建的对象和其他变量?或者它们是自动处理的还是我有这个整体概念错误?做这件事的正确方法是什么?我尽量避免使用GC。Android正确清理/处置

回答

12

使用不带内存管理的GC语言进行清理的唯一方法是GC。您可以强制使用GC,但不建议使用GC(GC非常好),以便将GC更清洁的主动设置对象设置为空。

增加:

而且尽量使对象作为当地的地,这样他们GCed,因为他们范围之。

2

只要不保留对对象(变量)的引用,大多数情况下它们都会被清除。有些东西就像cursorbitmap虽然需要关闭才能删除,以防止内存泄漏。

只要您的对象创建不在顶层,我认为您不必担心GC。注意:GC是java的一部分。你无法避免它。

附录1:如果你真的担心它,你可以重新使用变量。这样可以将对象创建保持在最低限度,但这样做会使该变量丢失,并且无法存储大量数据。

3

调用System.gc()将强制垃圾收集发生。

有一个系统计算您创建的对象的引用。如果你循环了很多并且创建了很多对象,你将会在这些对象堆积的地方创建一段时间。系统会在您的处理器没有做任何事情时收集垃圾,或者在收集之前等待您需要更多空闲内存。如果您已经处理了一段时间,由于处理过程中发生垃圾收集,您的性能会出现问题。

请查看此页面,搜索“垃圾收集”

http://developer.android.com/guide/practices/design/performance.html

注:具有应用程序上下文创建会活到应用程序执行的最后什么。使用活动上下文创建的任何内容都将一直存在,直到活动结束。这两种情况会导致内存泄漏!

3

有关具体到Android一个更完整的答案:

请务必阅读application lifecycle为Android。它将帮助您避免Android中的活动泄漏。

2

Android的活动有onDestroy()方法。您可以使用此方法关闭打开的连接或对话框或关闭一些挂起的任务。
您还可以阅读Java GC以更好地理解它。我会推荐SCJP书籍,垃圾收集章节。它很好地解释了一个对象何时有资格进行垃圾回收。

+0

我相信OP在谈论物体的活动。作为一般规则,你不应该调用你的活动onDestroy()方法。让操作系统处理它。 – AedonEtLIRA