看了一些大牛们的一些经验分享,感觉简单的总结记录下来是有必要的。
Android开发的主要问题包括五个方面:
1.性能;
2.产品质量;
3.产品迭代;
4.多进程架构;
5.其它典型问题。在性能方面,运行速度依赖于性能分析、优化UI布局,优化算法和数据结构和业务逻辑调整。
防止内存泄露是一个需要特别注意的问题。当然,占用内存占用的因素还包括不够优化的数据结构、图片,所以能少用图片就尽量少用,而对于多进程架构,要注意Android是基于Linux的内存管理的,即使Java内存释放,内存占用可能仍然很高。
多进程设计的技术方案,包括四个方面:1.常驻进程;2.UI进程;3.特殊任务进程;4.IPC。
数据库操作方面,单进程引用计数方式打开/关闭数据库,多进程可以用ContentProvider。
Android系统有一些安全问题,例如,广播发送/接收、Intent extra参数提取,也会影响到应用的开发。
技术跟踪时,要有专业人员对Android版本及SDK进行跟踪,发现其新特性和技术的价值挖掘,及时发现并解决产品的兼容性问题。对于Android Support库,当一些新的API的补充,大家也可以去关注。Android Studio和Android Plugin for Gradle,开发人员应关注新特性,适时引入项目,优化构建流程。在性能优化和质量工具方面,开发者一定要注意优化产品的各性能指标(运行速度、内存占用、流量消耗、电量消耗)并引入适当的质量工具如Android Lint等,提高代码质量。
Android内存优化的5R法则:
- Reduce:差异化处理缓存容量、图片资源(针对不同dpi切图不同的图,尤其是引导页);资源按需加载;减小bitmap对象的内存占用,这一点很重要,手段包括inSampleSize和decode format。
- Reuse:所有的Reuse背后的精髓都是pool模型的使用,选用一些比较经典的算法;Bitmap对象的复用,这与前文是不同层级的,具体是inBitmap(但不好的地方是增加GC操作),创建inBitmap对象池,让不同场景下复用;注意在ListView/GirdView中ConvertView的复用;避免频繁创建和回收对象,否则可能引发不断的GC行为。
- Recycle:注意Activity泄露,包括内部类、容器对象泄露,Static和Singleton;需要谨慎选择合适的Context;注意有生命周期对象的泄露,注意大胖子(Bitmap和WebView)的及时回收;onTrimMemory()与onLowMemory()的回调。
- Refactor:使用优化过后的数据结构,如针对HashMap的处理,其次建议使用static,反对使用枚举;减少内存的碎片化,可以先给大的对象申请,再把一些连续的对象放在一起申请;优化布局,减少内存消耗,比如一些不必要的背景。
- Revalue:谨慎使用LargeHeap,LargeHeap虽然可以申请更多内存空间,但也意味着GC的时间变长,效率变低,同时还面临系统判定为占内存应用的弊端;谨慎使用多进程,除非Main Process;谨慎使用第三方libraries。