Android开发技术周报 Issue61笔记

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开发技术周报 Issue61笔记_第1张图片

Android内存优化杂谈 

内存优化主要包括两点:
优化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成为一个不占资源的空壳,泄露了也不会导致图片资源被持有。

减少bitmap占用的内存
  • 防止bitmap占用资源过大导致OOM
  • 图片按需加载:即图片的大小不应该超过view的大小。
  • 统一的bitmap加载器
  • 图片存在像素浪费:对于.9图,美工可能在出图时在拉伸与非拉伸区域都有大量的像素重复。通过获取图片的像素ARGB值,计算连续相同的像素区域,自定义算法判定这些区域是否可以缩放。
GC的类型
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的对象被分配,而这些往往是一些临时对象,被反复触发了。给到我们的暗示是:对象的复用不够。
GC优化
  • 字符串拼接优化
减少字符串使用加号拼接,改为使用StringBuilder。
  • 读文件优化
读文件使用ByteArrayPool,初始设置capacity,减少expand
  • 资源重用
建立全球缓存池,对频繁申请、释放的对象类型重用
  • 减少不必要或不合理的对象
例如在ondraw、getview中应减少对象申请,尽量重用。
  • 选用合理的数据格式
使用SparseArray, SparseBooleanArray, and LongSparseArray来代替Hashmap

安卓下拉刷新开源库对比




你可能感兴趣的:(android)