1.http用gzip压缩,设置连接超时时间和响应超时时间
http请求按业务需求,分为是否可以缓存和不可缓存,那么在无网络环境下,仍通过缓存的httpResponse
浏览部分数据,实现离线阅读
2.listview优化
复用convertview
异步加载图片
快速滑动列表时(scroll_state_fling),item的图片或者需要消耗资源的view可以不显示处理,在scroll
_state_touch_scroll和scroll_state_idle下显示view
item尽可少的使用控件和布局的层次,背景色和cacheColorHint设置为相同颜色
getview优化,getview不要做复杂的逻辑运算
3.使用线程池,分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池中,避免阻塞
4.异步任务,分为核心任务和普通任务,只有核心任务中出现的系统错误才会报错,异步任务的ui操作需要
判断原Activity是否处于激活状态
5.尽量避免static成员变量引用资源耗费过多的实例,比如context
6.使用weakreference代替强引用
7.bitmap及时销毁,ondestory中回收
8.保证cursor占用的内存从被及时的释放到
9.线程也是造成内存泄露的一个重要源头,因为线程的生命周期不可控
10.ImageView加载网络图片,必须使用异步加载
11.在自定义view,交互部分,不要写成线程不断刷新界面,而是根据TouchListener触发刷新页面
12.Logcat的输出:因为会增加系统开销,logcat需要底层的JNI调用
13.proguard扰码器
14基础知识:
访问变量比访问一个类的字段要快
同时判断数据为空一般不用getCount()==0而是使用isEmpty()
慎用全局变量
尽量少的注册广播通知接收,同时适当的通过重新onParse和onResume来控制广播接收
15.采用硬件加速在application添加android:hardwareAccelerated=true,不过在3.0才能使用
16.view中设置缓存属性,.setDrawingCache为true
17.优化布局
18.动态加载view,采用viewStub,避免一些不经常用的试图长期获得引用
19.在Activity中的window的背景图设置为null,getwindow.setBackgroundDrawable(null)
20.采用<merge>优化布局层数,采用<include>共享布局
21.查看Heap的大小
22.利用traceview查看跟踪函数调用
23.采用SurfaceView在子线程中刷新UI,避免手势的处理和绘制在同一UI线程中。
24.采用JNI,将耗时的处理放在c/c++层
25.有些能用文件的操作使用文件操作,文件操作比数据库操作快
26.对大图片进行缩放
数据库:
1.相对于封装过的contentprovider而言,原始的sql语句执行效率高
2.对于需要一次修改多个数据时,可以使用事务
3.批量插入多行数据使用Inserthelper
4.尽量使用文件操作
电源优化:
1.在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那么就不需要执行相关操作
2.使用效率高的数据格式和解析方式,推荐使用JSON和Protobuf
3.正在进行大数据量下载时,尽量使用GZIP方式下载
4.其他:回收java对象,特别是较大的java对象,使用reset方法,对定位需求不是太高的话尽量不要使用
GPS定位,尽可能的使用WiFi和移动网络cell定位,尽量不要使用浮点运算,获取屏幕尺寸等信息可以使用
缓存技术,不需要进行多次请求,使用AlarmManager来定时启动服务代替使用sleep方法的定时任务。
http请求按业务需求,分为是否可以缓存和不可缓存,那么在无网络环境下,仍通过缓存的httpResponse
浏览部分数据,实现离线阅读
2.listview优化
复用convertview
异步加载图片
快速滑动列表时(scroll_state_fling),item的图片或者需要消耗资源的view可以不显示处理,在scroll
_state_touch_scroll和scroll_state_idle下显示view
item尽可少的使用控件和布局的层次,背景色和cacheColorHint设置为相同颜色
getview优化,getview不要做复杂的逻辑运算
3.使用线程池,分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池中,避免阻塞
4.异步任务,分为核心任务和普通任务,只有核心任务中出现的系统错误才会报错,异步任务的ui操作需要
判断原Activity是否处于激活状态
5.尽量避免static成员变量引用资源耗费过多的实例,比如context
6.使用weakreference代替强引用
7.bitmap及时销毁,ondestory中回收
8.保证cursor占用的内存从被及时的释放到
9.线程也是造成内存泄露的一个重要源头,因为线程的生命周期不可控
10.ImageView加载网络图片,必须使用异步加载
11.在自定义view,交互部分,不要写成线程不断刷新界面,而是根据TouchListener触发刷新页面
12.Logcat的输出:因为会增加系统开销,logcat需要底层的JNI调用
13.proguard扰码器
14基础知识:
访问变量比访问一个类的字段要快
同时判断数据为空一般不用getCount()==0而是使用isEmpty()
慎用全局变量
尽量少的注册广播通知接收,同时适当的通过重新onParse和onResume来控制广播接收
15.采用硬件加速在application添加android:hardwareAccelerated=true,不过在3.0才能使用
16.view中设置缓存属性,.setDrawingCache为true
17.优化布局
18.动态加载view,采用viewStub,避免一些不经常用的试图长期获得引用
19.在Activity中的window的背景图设置为null,getwindow.setBackgroundDrawable(null)
20.采用<merge>优化布局层数,采用<include>共享布局
21.查看Heap的大小
22.利用traceview查看跟踪函数调用
23.采用SurfaceView在子线程中刷新UI,避免手势的处理和绘制在同一UI线程中。
24.采用JNI,将耗时的处理放在c/c++层
25.有些能用文件的操作使用文件操作,文件操作比数据库操作快
26.对大图片进行缩放
数据库:
1.相对于封装过的contentprovider而言,原始的sql语句执行效率高
2.对于需要一次修改多个数据时,可以使用事务
3.批量插入多行数据使用Inserthelper
4.尽量使用文件操作
电源优化:
1.在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那么就不需要执行相关操作
2.使用效率高的数据格式和解析方式,推荐使用JSON和Protobuf
3.正在进行大数据量下载时,尽量使用GZIP方式下载
4.其他:回收java对象,特别是较大的java对象,使用reset方法,对定位需求不是太高的话尽量不要使用
GPS定位,尽可能的使用WiFi和移动网络cell定位,尽量不要使用浮点运算,获取屏幕尺寸等信息可以使用
缓存技术,不需要进行多次请求,使用AlarmManager来定时启动服务代替使用sleep方法的定时任务。