系统性能调优工具介绍
首先从函数的耗时来说,有一个工具 TraceView 这是 androidsdk 自带的工作,用于测量函数耗时的。
UI 布局的分析,可以有 2 块,一块就是 Hierarchy Viewer 可以看到 View 的布局层次,以及每个 View 刷新
加载的时间。
这样可以很快定位到那块 layout & View 耗时最长。
还有就是通过自定义 View 来减少 view 的层次。
回到顶部
2.什么情况下会导致内存泄露
内存泄露是个折腾的问题。
什么时候会发生内存泄露?内存泄露的根本原因:长生命周期的对象持有短生命周期的对象。短周期对象就无
法及时释放。
I.静态集合类引起内存泄露
主要是 hashmap,Vector 等,如果是静态集合 这些集合没有及时 setnull 的话,就会一直持有这些对象。
II.remove 方法无法删除 set 集 Objects.hash(#rstName, lastName);
经过测试,hashcode 修改后,就没有办法 remove 了。
III. observer 我们在使用监听器的时候,往往是 addxxxlistener,但是当我们不需要的时候,忘记
removexxxlistener,就容易内存 leak。
广播没有 unregisterrecevier
IV.各种数据链接没有关闭,数据库 contentprovider,io,sokect 等。cursor
V.内部类:
java 中的内部类(匿名内部类),会持有宿主类的强引用 this。
所以如果是 new Thread 这种,后台线程的操作,当线程没有执行结束时,activity 不会被回收。
Context 的引用,当 TextView 等等都会持有上下文的引用。如果有 static drawable,就会导致该内存无法
释放。
VI.单例
单例 是一个全局的静态对象,当持有某个复制的类 A 是,A 无法被释放,内存 leak。
回到顶部
3.如何避免 OOM 异常
首先 OOM 是什么?
当程序需要申请一段“大”内存,但是虚拟机没有办法及时的给到,即使做了 GC 操作以后
评论2
最新资源