[转]技巧和设计模式 --- 内存分配

本文提供了一系列减少Java对象创建、管理内存及缓存的有效策略,旨在帮助开发者优化Android应用的性能表现,减少垃圾回收带来的延迟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.不要创建 Java 对象

 

在性能敏感的代码里, 尽量避免创建 Java 对象,例如:

 

[1] 测量 onMeasure()

 

[2] 布局 onLayout()

 

[3] 绘图 dispatchDraw(), onDraw()

 

[4] 事件处理  dispatchTouchEvent(), onTouchEvent()

 

[5] Adapter getView(), bindView()

 

2.GC, 垃圾回收

 

 [1] 整个程序暂停

 

 [2] 慢(大约几百个毫秒)

 

3.强行限制 (适用于调试模式)

 

 

int prevLimit = -1;
try {
prevLimit = Debug.setAllocationLimit(0);
// 执行不分配内存的代码
} catch (dalvik.system.AllocationLimitError e) {
// 如果代码分配内存, Java 虚拟机会抛出错误
Log.e(LOGTAG, e);
} finally {
Debug.setAllocationLimit(prevLimit);
}
 

 

4.管理好对象

 

 

[1] 使用软引用 内存缓存的最佳选择

 

 

[2] 使用弱引用 避免内存泄露

 

5.内存缓存实例

 

 

private final HashMap<String, SoftReference<T>> mCache;
     public void put(String key, T value) {
     mCache.put(key, new SoftReference<T>(value));
    }

    public T get(String key, ValueBuilder builder) {
    T value = null;
    SoftReferece<T> reference = mCache.get(key);
    if (reference != null) {
        value = reference.get();
    }
    if (value == null) {
        value = builder.build(key);
        mCache.put(key, new SoftReference<T>(value));
    }
    return value;
}
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值