Android 性能调优点
来源:互联网 发布:大数据安全 英文 编辑:程序博客网 时间:2024/05/16 16:09
主要包括同步改异步、缓存、Layout优化、数据库优化、算法优化、延迟执行。
1. 同步改异步
这个就不用多讲了,耗时操作放在线程中执行防止占用主线程,一定程度上解决anr。
但需要注意线程和service结合(防止activity被回收后线程也被回收)以及线程的数量
线程池使用可见java的线程池
2. 缓存
java的对象创建需要分配资源较耗费时间,加上创建的对象越多会造成越频繁的gc影响系统响应。主要使用单例模式、缓存(图片缓存、线程池、View缓存、IO缓存、消息缓存、通知栏notification缓存)及其他方式减少对象创建。
(1). 单例模式
对于创建开销较大的类可使用此方法,保证全局一个实例,在程序运行过程中该类不会因新建额外对象产生开销。示例代码如下:
public class Singleton { private static Object obj = new Object(); private static Singleton instance = null; private Singleton(){ } public static Singleton getInstance() { // if already inited, no need to get lock everytime if (instance == null) { synchronized (obj) { if (instance == null) { instance = new Singleton(); } } } return instance; }}
(2). 缓存
程序中用到了图片缓存、线程池、View缓存、IO缓存、消息缓存、通知栏notification缓存等。
a. 图片缓存:见ImageCache和ImageSdCache
b. 线程池:使用Java的Executors类,通过newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor、newScheduledThreadPool提供四种不同类型的线程池
c. View缓存:
可见ListView缓存机制
通过convertView是否为null减少layout inflate次数,通过静态的ViewHolder减少findViewById的次数,这两个函数尤其是inflate是相当费时间的
d. IO缓存:
使用具有缓存策略的输入流,BufferedInputStream替代InputStream,BufferedReader替代Reader,BufferedReader替代BufferedInputStream.对文件、网络IO皆适用。
e. 消息缓存:通过 Handler 的 obtainMessage 回收 Message 对象,减少 Message 对象的创建开销
handler.sendMessage(handler.obtainMessage(1));
f. 通知栏notification缓存:下载中需要不断改变通知栏进度条状态,如果不断新建Notification会导致通知栏很卡。这里我们可以使用最简单的缓存
Map<String, Notification> notificationMap = new HashMap<String, Notification>();如果notificationMap中不存在,则新建notification并且put into map.
(3). 其他
能创建基类解决问题就不用具体子类:除需要设置优先级的线程使用new Thread创建外,其余线程创建使用new Runnable。因为子类会有自己的属性创建需要更多开销。
控制最大并发数量:使用Java的Executors类,通过Executors.newFixedThreadPool(nThreads)控制线程池最大线程并发
对于http请求增加timeout
3. Layout优化
使用抽象布局标签(include, viewstub, merge)、去除不必要的嵌套和View节点、减少不必要的infalte及其他Layout方面可调优点,顺带提及布局调优相关工具(hierarchy viewer和lint)。具体可见性能优化之布局优化
TextView属性优化:TextView的android:ellipsize=”marquee”跑马灯效果极耗性能,具体原因还在深入源码中
4. 数据库优化
主要包括索引和事务及针对Sqlite的优化。具体可见性能优化之数据库优化
5. 算法优化
这个就是个博大精深的话题了,只介绍本应用中使用的。
使用hashMap代替arrayList,时间复杂度降低一个数量级
6. 延迟执行
对于很多耗时逻辑没必要立即执行,这时候我们可以将其延迟执行。
线程延迟执行 ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(10);
消息延迟发送 handler.sendMessageDelayed(handler.obtainMessage(0), 1000);
- Android 性能调优点
- Android 性能调优点
- [Android UI开发] Android 性能调优点
- JAVA性能调优点滴
- android的优点
- android优点和不足
- Android之Fragment优点
- Android Stuidio之优点
- Android之Fragment优点
- Android的优点和不足之处
- Android的优点和不足之处
- Android的优点和不足之处
- Android的优点和不足之处
- Android定义生命周期的优点
- Android的优点和不足
- android的优点与不足
- sql 调优点
- 第24课:彻底解密Shuffle是如何成为Spark性能杀手的及调优点思考
- VC编程实现位图处理类(显示位图、加载位图、获取/设置像素点颜色)
- 怎样去理解信息时代的社群圈子?
- 连锁店统一店铺音乐解决方案_总部集中管控
- android viewpage 收藏
- NSIS Script简介
- Android 性能调优点
- 有意思的进程创建函数fork() && fork() || fork() .
- 失败的原因
- 序
- 欢迎使用CSDN-markdown编辑器
- 【iOS学习笔记】中将事件添加到系统日历
- VC编程实现色彩空间RGB与HSB(HSV)相互转换
- visio画UML用例图没有include关系的解决方法(转)
- js 300代码示例