26人参与 • 2025-02-20 • Android
错误示范:
for (i in 0..100000) { val temp = "item $i" // 每次循环new一个string → 疯狂gc! }
正确做法:
val sb = stringbuilder() for (i in 0..100000) { sb.clear() sb.append("item ").append(i) // 复用stringbuilder }
错误示范:
override fun ondraw(canvas: canvas) { val paint = paint() // 每次绘制都new → 内存炸裂! canvas.drawtext("hello", 0f, 0f, paint) }
正确做法:
private val paint = paint() // 提前初始化 override fun ondraw(canvas: canvas) { canvas.drawtext("hello", 0f, 0f, paint) }
场景 | 错误选择 | 正确选择 | 内存节省 |
---|---|---|---|
key为int的map | hashmap<int, ...> | sparsearray | 30%+ |
key为long的map | hashmap<long, ...> | longsparsearray | 30%+ |
只有两个值的键值对 | 用类/map | pair 或自定义结构 | 50% |
错误示范:
val list = arraylist<integer>() list.add(1) // int自动装箱为integer → 产生额外对象
正确做法:
val list = intarray(10) // 直接使用基本类型数组 list[0] = 1
场景:频繁创建同类对象(如recyclerview的viewholder)
代码示例:
private val viewholderpool = pools.simplepool<viewholder>(10) fun create(): viewholder { return viewholderpool.acquire() ?: viewholder(...) } fun recycle(viewholder: viewholder) { viewholderpool.release(viewholder) }
android profiler:
leakcanary:
strictmode:
内存抖动要避免,减少对象是关键
循环慎用临时工,ondraw里别新建
数据结构选得巧,自动装箱要杜绝
对象池化复用妙,工具检测保平安!
以上就是android避免内存抖动的解决方案的详细内容,更多关于android避免内存抖动的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论