android - 销毁 View (布局)

标签 android listview memory-leaks view garbage-collection

我现在正在与内存泄漏作斗争。所以我很好奇是否有任何方法可以手动销毁 View (在 Activity onDestroy 方法中)? 整个布局(activity contentView)有点复杂,因为有父子引用、上下文引用、标签等。

GC 现在无法收集我的布局。问题深藏在 View 结构中……所以找到它的唯一方法是尝试手动销毁叶 View ,这样 GC 会在某个时刻收集 Root View 并告诉我问题出在哪里。

我的布局结构:ViewFlipper(RelativeLayout, ListView(ViewFlipper(RelativeLayout, RelativeLayout)))

最佳答案

您可以从 ViewGroup 中删除一个 View,但是无法手动销毁一个 View。如果您遇到内存泄漏,通常是因为您持有对 View 之外的上下文的长期引用。

  1. 不要在静态字段中存储任何具有上下文的内容(即 Drawables - 位图就可以)
  2. 删除所有处理程序,清除所有计时器
  3. 不要紧抓 Threads/AsyncTasks 中的上下文,或者确保它们是弱引用的。

View 包含与其他 View (即另一个 View 的上下文)相关的信息是没问题的,因为所有 View 都被销毁了——这很可能是因为上下文被某些东西保留(并且上下文有一个句柄大多数事情 - 即您的所有 View )您无法释放内存。

关于android - 销毁 View (布局),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5419224/

相关文章:

java - Android中ListView的问题

c# - 如何在 ListView 处于 VirtualMode 时对 ListView 项目进行排序?

某些数字会导致 free() 在 Eratosthenes 算法中出现段错误

java - 广播接收器从深度 sleep 中醒来。 (就像,嘿,设备刚刚醒来,这是广播!)

android - 奇怪的 updateViewLayout 行为

android - 向下滚动 ListView 时随机复选框被选中

xcode - NSNumber 可能存在内存泄漏

android - 热点/网络共享模式下 Android 上的多播支持

Android Volley SSL 错误

api - 在 org.apache.catalina.core.JreMemoryLeakPreventionListener 中急切调用 URLConnection 的 setDefaultUseCaches(false) 的原因是什么