不要使用比需求更占空间的基本数据类型
SparseArray代替HashMap,节省内存开销
基本数据类型的成员,可以全写成static final,static会由编译器调用clinit方法进行初始化
static final不需要进行初始化工作,打包在dex文件中可以直接调用,并不会在类初始化申请内存
循环尽量用foreach,少用iterator, 自动装箱尽量少用
字符串的连接尽量少用加号(+),使用StringBuffer或者StringBuilder替代
尽量使用IntentService,而不是Service
非业务需要不要把activity的上下文做参数传递,可以传递application的上下文
和Activity有关联的对象写成static 如private static Button btn; private static Drawable drawable;
handler.postDelayed(),如果开启的线程需要传入参数,用弱引接收可解决,handler记得清除removeCallbacksAndMessages(null)
枚举优化
public class SHAPE
public static final int
public static final int
public static final int
public static final int
//flag 为true,表示可以多选, 限定枚举值value的取值范围
@IntDefflagtrue,valueRECTANGLE,TRIANGLE,SQUARE,CIRCLE
@TargetElementType.PARAMETER,ElementType.METHOD,ElementType.FIELD
// RetentionPolicy.SOURCE表示资源加载阶段
@RetentionRetentionPolicy.SOURCE
public @interface Model
private @Model int RECTANGLE
public void setShape@Model int value
this.valuevalue
@Model
public int
this.value
调用
SHAPE new SHAPE s.setShapeSHAPE.CIRCLESHAPE.RECTANGLE
System.out.printlns.getShape
对象池的使用
通过控制对象的调用次数来控制创建对象对内存的影响
package com.example.wuyang.lsn4code android.util.SparseArray
public abstract class ObjectPoolT
//空闲沲,用户从这个里面拿对象
private SparseArrayT freePool
//正在使用沲,用户正在使用的对象放在这个沲记录
private SparseArrayT lentPool
//沲的最大值
private int maxCapacity
public ObjectPoolint initialCapacity, int maxCapacity
//初始化对象沲
initalizeinitialCapacity
this.maxCapacitymaxCapacity
private void initalizeint initialCapacity
new SparseArray
new SparseArray
forint iinitialCapacityi++
// 对象创建留给调用者完成
freePool.puti,create
/**
* 申请对象
* @return
*/
public T acquire throws Exception
T null
synchronized freePool
int freePool.size
forint ifreeSizei++
int freePool.keyAti
freePool.getkey
iftnull
this.lentPool.putkey,t
this.freePool.removekey
t
//如果没对象可取了
iftnull lentPool.size+freeSizemaxCapacity
//这里可以自己处理,超过大小
iflentPool.size+freeSizemaxCapacity
throw new Exception
create
lentPool.putlentPool.size+freeSize,t
t
/**
* 回收对象
* @return
*/
public void releaseT t
iftnull
int lentPool.indexOfValuet
//释放前可以把这个对象交给用户处理
restoret
this.freePool.putkey,t
this.lentPool.removekey
protected void restoreT t
protected abstract T create
public ObjectPoolint maxCapacity
thismaxCapacity/2,maxCapacity
package com.example.wuyang.lsn4codepublic class MyObjectPool extends ObjectPool
public MyObjectPoolint initialCapacity, int maxCapacity
superinitialCapacity, maxCapacity
public MyObjectPoolint maxCapacity
supermaxCapacity
@Override
protected Object //LRU
new Object
调用:
MyObjectPool new MyObjectPool Object null
Object null
Object null
Object null
Object null
try
o1 pool.acquire
o2 pool.acquire
o3 pool.acquire
o4 pool.acquire
o5 pool.acquire
Log.i,o1.hashCode+
Log.i,o2.hashCode+
Log.i,o3.hashCode+
Log.i,o4.hashCode+
Log.i,o5.hashCode+
catch Exception e
e.printStackTrace
Log.e, e.toString
还没有评论,来说两句吧...