本文罗列一些优化建议,具体原理不在赘述网上很多
本文地址 http://blog.csdn.net/a56573016613/article/details/48291191
static 的使用:
A 任何类任何情况不要出现static Context mContext这样的变量(Application的可以写)。
B 永远不要出现修改static对象的代码,如static String mName = “xxx”; mName = “zzzz”;
Context的使用:
A SharedPreferences、DB、File、Http等非UI相关(不依赖于当前Activity)用Application的context代替
B Fragment里面尽量减少或者不使用getActivity(),如果必须使用必须判断非空
Broadcast使用:
如果不是跨进程的使用LocalBroadcastManager替换,这方面的可以参考http://www.cnblogs.com/trinea/archive/2012/11/09/2763182.html;
或者使用这个框架EventBus
Fragment使用:
A 必须实现setArguments,以及对应的onCreate
B 和依赖的Activity事件交互用接口方式或者EventBus,不要使用具体对象
线程使用:
A 用线程池替换AsyncTask,Thread,Time。Timer如果仅是计时可用CountDownTimer替换
B Activity、Fragment、Service做耗时操作必须使用线程
C Activity、Fragment后台线程,必须在onDestory之前做相应处理
XML:
A 减少过度背景设置和布局嵌套造成的过度渲染
B include、 viewStub 、 merge
框架相关:
A 类的定义不要写get、set方法(如果必须遵循面向对象特性这条忽略)
B 使用OkHttp网络框架,不要使用xUtils的图片框架(文件流操作写的有些问题(新版本也许改了))
C 大型或者多人协作项目建议使用MVP或者MVVM
减少不必要的资源浪费
A 尽量不要使用Context mContext这样的变量
B 不要在循环内部声明对象,减少指针的分配
C 不要在onDraw内做算法,对象初始化等操作
D 尽量减少方法的参数
E 面向接口编程,不要面向具体对象
其它优化:
A 数组赋值使用SystemCopy代替循环赋值
B List对象重新赋值时,先clean
C ArrayMap代替HasMap
D String.format代替形如 “a”+b+“c”这样的代码
E 代码内尽量不要直接写字符串
F Adapter永远不要尝试在getView里面new对象(实例化ViewHolder逻辑以外)
G Fragment、Activity 的onSaveInstanceState要多考虑
H Fragment的生命周期依赖于Activity,但是FragmentManager这个才是具体管理类,如果出现不可理解现象,请关注这个
I 异常处理不要写在循环内部,异常尽量指定类型不要直接一个Exception完事
J 大量数据计算可以先把浮点数转换成整数,移位操作替代运算符,多考虑下算法复杂度(数量较小的计算可以忽略)
K 延迟加载,预处理机制
L 用int类型替换结构体;用多个一维数组替换多维数组
I 用SurfaceView来实现加载数据的动画,替换ProgressBar或者继承View方式的实现,解决解析数据是卡顿现象
。。。。。。。。
想到了在补充,欢迎拍砖