15个必知的Android开发者选项
其中有用的有:Stay awake:充电时保持屏幕唤醒
Allow mock locations
Show layout bounds:显示布局格子(每当有PM过来问我人家这个界面是Native实现的,还是类似
Hybrid方案的Web实现时,我就让他开启这个功能,WebView是一个整体的格子,Native View是各种小格
子组合而成)
Animation scale:动画的尺度、速度调整
Debug GPU overdraw:
原色: 没有过度绘制
蓝色: 一次过度绘制
绿色: 两次过度绘制
粉色: 三次过度绘制
红色: 四次及以上过度绘制。
Show CPU usage
Profile GPU rendering:(开启后,会在下方显示一张实时绘制图,绿线是性能流畅与否的底线,超过
的时刻就会出现掉帧)
Android内存优化杂谈
内存优化主要包括两点:
优化RAM,即降低运行时内存。这里的目的是防止程序发生OOM异常,以及降低程序由于内存过大被LMK机
制杀死的概率。另一方面,不合理的内存使用会使GC大大增多,从而导致程序变卡。
优化ROM,即降低程序占ROM的体积。这里主要是为了降低程序占用的空间,防止由于ROM空间不足导致程
序无法安装。
本文的着重点为第一点。
RAM:Random Access Memory。高速存取,读写时间相等,且与地址无关,如计算机内存等。
ROM:Read Only Memory只读存储器。断电后信息不丢失,如计算机启动用的BIOS芯片。
优化RAM,即降低运行时内存。这里的目的是防止程序发生OOM异常,以及降低程序由于内存过大被LMK机
制杀死的概率。另一方面,不合理的内存使用会使GC大大增多,从而导致程序变卡。
优化ROM,即降低程序占ROM的体积。这里主要是为了降低程序占用的空间,防止由于ROM空间不足导致程
序无法安装。
本文的着重点为第一点。
RAM:Random Access Memory。高速存取,读写时间相等,且与地址无关,如计算机内存等。
ROM:Read Only Memory只读存储器。断电后信息不丢失,如计算机启动用的BIOS芯片。
通过兜底回收内存
Activity泄漏会导致该Activity引用到的Bitmap、DrawingCache等无法释放,对内存造成大的压力,兜底回收是指对于已泄漏Activity,尝试回收其持有的资源,泄漏的仅仅是一个Activity空壳,从而降低对内存的压力。
做法也非常简单,在Activity onDestory时候从view的rootview开始,递归释放所有子view涉及的图片,背景,DrawingCache,监听器等等资源,让Activity成为一个不占资源的空壳,泄露了也不会导致图片资源被持有。
Activity泄漏会导致该Activity引用到的Bitmap、DrawingCache等无法释放,对内存造成大的压力,兜底回收是指对于已泄漏Activity,尝试回收其持有的资源,泄漏的仅仅是一个Activity空壳,从而降低对内存的压力。
做法也非常简单,在Activity onDestory时候从view的rootview开始,递归释放所有子view涉及的图片,背景,DrawingCache,监听器等等资源,让Activity成为一个不占资源的空壳,泄露了也不会导致图片资源被持有。
减少bitmap占用的内存
- 防止bitmap占用资源过大导致OOM
- 图片按需加载:即图片的大小不应该超过view的大小。
- 统一的bitmap加载器
- 图片存在像素浪费:对于.9图,美工可能在出图时在拉伸与非拉伸区域都有大量的像素重复。通过获取图片的像素ARGB值,计算连续相同的像素区域,自定义算法判定这些区域是否可以缩放。
GC的类型
GC的类型有以下几种,其中GC_FOR_ALLOC是同步方式进行,对应用帧率的影响最大。
GC的类型有以下几种,其中GC_FOR_ALLOC是同步方式进行,对应用帧率的影响最大。
- GC_FOR_ALLOC:当堆内存不够的时候容易被触发,尤其是new一个对象的时候,很容易被触发到,所以如果要加速启动,可以提高dalvik.vm.heapstartsize的值,这样在启动过程中可以减少GC_FOR_ALLOC的次数。
- GC_EXPLICIT:这个gc是被可以调用的,比如system.gc, 一般gc线程的优先级比较低,所以这个垃圾回收的过程不一定会马上触发, 千万不要认为调用了system.gc,内存的情况就能有所好转
- GC_CONCURRENT:当分配的对象大小超过384K时触发,注意这是以异步的方式进行回收的.如果发现大量反复的Concurrent GC出现,说明系统中可能一直有大于384K的对象被分配,而这些往往是一些临时对象,被反复触发了。给到我们的暗示是:对象的复用不够。
- 字符串拼接优化
- 读文件优化
- 资源重用
- 减少不必要或不合理的对象
- 选用合理的数据格式