Android编程规范及优化

一、编码规则

1.      函数的规模尽量限制在 200 行以内。

2.      一个方法仅完成一件功能。如果一个方法实现多个功能,可以考虑分拆成多个方法,每个方法实现一个功能。

3.      如果多段代码重复做同一件事情,那么可考虑提供一个公用的方法实现这个功能,供其它方法调用。

4.      检查函数所有参数输入的有效性。例如参数传入 ArrayList 对象为空,如果直接使用会导致程序异常。

5.      对方法的异常中应有全面的处理,不要想当然在 try 块中实现的功能中只可 能发生某一种异常,实际上可能会发生很多异常,如:IOException、NullPointerException 等,对抛出的异常最后应加上捕捉默认的 Exception,并进行处理。

6.      数据库的操作,应记得关闭游标和数据库,在需要SimpleCursorAdapter时,可使用Activity.startManagingCursor(Cursor c)来管理游标,使游标的生命周期和Activity的生命周期一致。

7.      Log(系统名称 模块名称 接口名称,详细描述),方便定位问题

8.      不要重用父类的handler,对应一个类的handler也不应该让其子类用到,否则会导致message.what冲突

9.      数据一定要效验,例如字符型转数字型,如果转换失败一定要有缺省值;服务端响应数据是否有效判断;

10.   程序中使用到的资源应当被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。

11.   在OnDestroy()中 将不用的static的成员置成null

12.   遍历Collection的不要去修改或删除元素。如有删除的元素,可以在遍历之后完成。

二、  性能优化

2.1 代码优化

1.      字符串频繁操作时,多用StringBuffer而少用String

2.      尽量使用本地变量,即反复使用的变量要先保存成临时或局部变量,尤其是循环中使用的变量

3.      如果一个方法不访问(不修改)成员变量,请用static

4.      尽量不用get和set,如果你非要用的话请加上final关键字,编译器会把它当成内联函数

5.      不修改的static变量请用static final常量代替

6.      避免使用枚举,请使用常量代替(枚举需要创建对象,开销更大)

7.      不使用的引用变量要手动置null,提高内存被回收的几率

8.      用多个一维数组代替二维数组 int[][]=====int[] int[],二维数据占用的内存空间比一维数组多得多,大概10倍以上。

9.      不要在循环当中声明临时变量,不要在循环中捕获异常

10.   如果对于线程安全没有要求,尽量使用线程不安全的集合对象

11.   如果程序会频繁创建线程,则可以考虑使用线程池。

12.   创建新的对象都需要额外的内存空间,要尽量减少创建新的对象。

13.   对Context的使用如果可以用Application Context,尽量别用Activity Context,以防止Activity占用内存不能及时回收。

14.   static变量在程序运行期间其内存是共享的,且只有一份,所以有时将一些变量声明为static,可以起到节约内存空间的作用,但是由于静态变量生命周期很长,不易被系统回收,所以使用静态变量要合理,不能盲目的使用。

15.   尽量避免非常大的内存分配,有时候问题不是由当时的堆状态造成的,而是因为分配失败造成的。分配的内存块都必须是连续的,而随着堆越来越满,找到较大的连续块越来越困难。

16.   尽量使用System.arraycopy ()代替通过来循环复制数组,System.arraycopy() 要比通过循环来复制数组快的多

17.    适当的使用弱引用(WeakReference)。当定义了一个对象,用弱引用记住它后,在下一次GC运行时就会把它当作无用的对象回收,和软引用的区别是不会根据内存情况判断。

2.2启动优化

1.     减少静态对象创建,尽可能不要在Application 执行静态逻辑代码。

2.     Application在oncreat中,不要做io读写等耗时操作,如果要做,则尽量可能延后执行放到非UI线程去做。

3.     在减少闪屏的布局的层次,尽可能在xml中布局,而非代码中动态创建。

4.     闪屏界面Activity的theme设置为透明色,防止运行慢时出现的白屏或黑屏现象。

5.     不要在activity的onCreat, onStart,onResume的生命周期中去加载动画,尽量延迟加载,以防止出现卡屏。

2.3布局优化

1.     抽象布局标签

(1) <include>标签

include标签常用于将布局中的公共部分提取出来供其他layout共用,以实现布局模块化,这在布局编写方便提供了大大的便利。

(2) <viewstub>标签

viewstub标签同include标签一样可以用来引入一个外部布局,不同的是,viewstub引入的布局默认不会扩张,即既不会占用显示也不会占用位置,从而在解析layout时节省cpu和内存。

viewstub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如进度布局、网络失败显示的刷新布局、信息出错出现的提示布局等。

(3) <merge>标签

在使用了include后可能导致布局嵌套过多,多余不必要的layout节点,从而导致解析变慢,不必要的节点和嵌套可通过hierarchy viewer或设置->开发者选项->显示布局边界查看。

2.     能用线性布局(LinearLayout)很方便的实现的,尽量用线性布局实现(效率相对高)。

3.     如果多个Activity中包含共同的UI处理,那么可以提炼一个CommonActivity,把通用部分叫由它来处理,其他activity只要继承它即可或者用fragment来实现。

4.     styles.xml:将layout中不断重现的style提炼出通用的style通用组件,放到styles.xml中。

2.4图片优化

1.     如图片尺寸大于界面显示尺寸,可以转化为缩略图再加载:

BitmapFactory.Options options = new BitmapFactory.Options();

options.inSampleSize = 2;

Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options);

2.     用ARBG_4444色彩模式加载图片:

Android中有四种,分别是:

ALPHA_8:每个像素占用1byte内存

ARGB_4444:每个像素占用2byte内存

ARGB_8888:每个像素占用4byte内存

RGB_565:每个像素占用2byte内存

Android默认的色彩模式为ARGB_8888,这个色彩模式色彩最细腻,显示质量最高。但同样的,占用的内存也最大。

3.     本地的背景图片,首先考虑用shape或者.9替代,不能代替的图片,可以考虑是否可以延后加载。

4.     Bitmap不用的时候,及时调用recycle(),

5.     采用开源框架如:Universal-Image-Loader ,picasso, Volley 均实现对图片的缓存和加载优化。

2.5 ListView列表优化

1.      多用convertView缓存,减少频繁创建和加载布局,减少滑动时GC次数

2.      采用ViewHolder模式,缓存子布局,来减少findViewById使用频率,

3.      ListView中item的布局至关重要,必须尽可能的减少使用的控件,布局的层级,千万不要item布局中再嵌套listView或者GridView会严重影响流畅性。

4.      getView方法中不能做复杂的逻辑计算,特别是数据库操作,否则会严重影响滑动时的性能。 遇到图片等大数据的加载时,采用异步加载策略。

5.      如item条目很多可以考虑分页加载的方式,来减少内存的占用。

6.      ListView的背景色与cacheColorHint设置相同颜色,可以提高滑动时的渲染性能

7.      ListView,GridView的高宽尽量使用fill_parent,match_parent,或者具体高度。(使用wrap_content每次getView()都会去计算高宽,会频繁调用getView())

时间: 2024-12-13 19:56:41

Android编程规范及优化的相关文章

Android编程规范V1.0

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 本文章是根据众多公司的编程规范整理而成,如果错误,还请指出. Android编程规范 编写人 赵凯强 日期 2014-8-5 审核人   日期   批准人   日期     修改记录(REVISION CHART) 版本 作者 修改描述 修改日期 1.0 赵凯强 初稿 2014-8-5     1.概述 1.1目的与概述 本文提供一整套编写高效可靠的android代码的标准.约定和指南.它们以安全可靠的软

Android编程规范与常用技巧

一.Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名.静态成员变量命名只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写. 3.常量命名只能包含字母和_,字母全部大写,单词之间用_隔开. 4.layout中的id命名命名模式为: view缩写_模块名称_view的逻辑名称 view的缩写详情如下: LayoutView:lv RelativeView:rv TextView:tv ImageView:iv ImageButton:im B

Android 编程规范指南

一.目录规范 1.系统目录规范 Requirement:需求文档: Design:设计文档: Planning&Log:计划.日志.会议: Test:集成测试.系统测试.测试报告: Study:学习资料.demo等: Deployment:发布.部署等: Source:源代码以及单元测试: Help:相关帮助文档: 2.源码目录规范 目录即包(package):目录下所有类都属于这个命名空间,一主类一文件: 目录层次递归:一般系统命名空间目录最好不要超过3层: 二.代码编码规范 1.常见的命名规

Android编程规范不完全指南

命名规则 1). 类名,接口名: 以大写开头,如果一个类的类名由多个单词组成,所有单词的首字母必须大写,单词尽量写全称,不要简写,除非约定俗成的名字,例如:URL,RTMP,RTSP 这些广泛使用的专有名词,可以全部大写,也可以首字母大写. 例如 HttpRequest,CourseActivity 2). 局部变量,类的成员变量,类的成员函数,函数参数: 以小写字母开头其他的单词首字母大写,变量名不建议使用下划线分隔单词,建议使用驼峰命名法,Android的系统类都采用此方法. 例如 toSt

我总结的Android编程规范

命名规则 1). 类名,接口名:以大写开头,如果一个类的类名由多个单词组成,所有单词的首字母必须大写,单词尽量写全称,不要简写,除非约定俗成的名字,例如:URL,RTMP,RTSP 这些广泛使用的专有名词,可以全部大写,也可以首字母大写.例如 HttpRequest,CourseActivity 2). 局部变量,类的成员变量,类的成员函数,函数参数:以小写字母开头其他的单词首字母大写,变量名不建议使用下划线分隔单词,建议使用驼峰命名法,Android的系统类都采用此方法.例如 toString

Android编码规范及性能优化整理

最近看到新人的android代码实在问题太多,一些基本的地方都有问题,于是重新培训了下代码规范,希望后面能慢慢好起来. 一.Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名.静态成员变量命名只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名只能包含字母和_,字母全部大写,单词之间用_隔开 4.layout中的id命名命名模式为:view缩写_模块名称_view的逻辑名称view的缩写详情如下LayoutView:lvRela

Android编程开发规范

 Android编程开发规范         原文地址 http://www.jianshu.com/p/9b8aeca9b281 一.约定 Activity.onCreate(),Fragment.onActivityCreated(),作为程序入口,不用写入太多代码,尽量保持只调用initXXX()方法,简单明了展示调用过程.如:initData(),initView(). 单个方法体不要过长 代码任何地方不要拼错单词 杜绝整个类代码格式化 调用方法保持"临近原则",被调用的方法,

值得你学习的 Android 开发规范(下)

4 资源文件规范 4.1 资源布局文件(XML文件(layout布局文件)) 全部小写,采用下划线命名法 4.1.1 contentView命名 必须以全部单词小写,单词间以下划线分割,使用名词或名词词组. 所有Activity或Fragment的contentView必须与其类名对应,对应规则为:将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀). 例如:activity_main.xml 4.1.2 Dialog命名 规则:dialog_描述.xml 例如:dialog_hint.x

Android开发规范(编码+性能+UI)

现在为你带来Android开发规范,包括Android编码规范,Android性能优化以及Android UI优化. 一.Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名.静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名 只能包含字母和_,字母全部大写,单词之间用_隔开 4.layout中的id命名 命名模式为:view缩写_模块名称_view的逻辑名称 view的缩写详情如下 LayoutView:lv