APP内存优化方法
1.数据结构优化
2.对象复用
3.避免内存泄漏
数据结构优化
1.频繁地使用字符串拼接不要用“+”的方式,应该使用StringBuilder,“+”的方式会产生无用的中间变量,而且难以删除
2.ArrayMap和SparseArray替换HashMap
HashMap效率较低,内存占用较高,使用前两者能解决这种问题。HashMap中的一个entry需要额外占用32B
3.内存抖动
length=200000;
由于length比较大,每次new String[length]时,都会占用比较大的新生代空间,很有可能此时新生代空间满了,所以,会进行Minor GC(其他线程在此时处于停止状态),并且这回出现多次。APP运行效率降低。
如何解决?
直接将上面这行语句放在循环外面就行。
在android Monitor中可以看到这样的内存锯型图
对象复用
1.复用系统自带的资源
比如使用Application Context而不用 Activity Context(后面有讲到)
2.ListView/GridView的ConvertView复用
3.避免在onDraw方法里面执行对象的创建
内存泄漏
内存泄漏:由于代码瑕疵,导致这块内存,虽然是停止不用了,但依然被其它东西占用着,使GC没办法对它回收。
打开这个线程的Activity,然后退出,再打开,在退出,重复操作,你会发现这个activity占用内存越来越大。
不断的重复,并且点击GC后,你会发现110这个数据一直在变大。
为甚么?我们在关闭这个activity时,由于这个线程睡眠了5分钟,所以它在关闭后还会存在,系统没办法对它进行回收。当再次打开这个activity时,上面一个activity就会成为内存泄漏的罪魁祸首。
从上面可以看出,Activity是很容易发生泄漏的
所以对于程序来说,用Application Context而不用Activity Context。
还有一点。要注意Cursor对象是否及时关闭,没有关闭的话,也容易出现内存泄漏。