Android开发性能优化总结
作者:OSTCB 发布时间:2021-11-05 14:03:59
一. 加载
预加载:1.反射注解框架Reflect信息,在Application内多线程预加载至缓存。2.资源预加载
懒加载:1.Fragment懒加载2.资源懒加载
二. 缓存
1. Http缓存,淘汰时间
2. 图片缓存,bitmap压缩,Lru淘汰,持久化二级缓存
3. 反射注解框架Reflect信息缓存,防止多次反射操作
三. 异步防止Anr
1. 避免在UI线程做太多耗时操作,IntentReceiver > 10s Anr
2. 并发操作多用读写锁,少用synchronized,Android虚拟机Art直到Android6.0为止尚未对synchronized做CAS优化,而synchronized在hotspot性能还可以。
3. 使用线程池,结合图片异步加载等需要开大量子线程时做到线程复用。
4. 不需要时取消任务,如Activity被结束时取消正在进行的加载任务。
四. 防止OOM
1. Bitmap:懒加载,LRU缓存,Bitmap压缩(根据ImageView大小),分块加载大图。
2. 大文件,如txt等,分段加载。
3. ListView&GridView做复用优化。利用ViewHolder,setTag
五. View优化
1. 优化布局层次,布局复用,善用include,merge等标签。
2. 避免过度绘制,减少元素,布局的重叠,开启DebugGPU overdraw调试,使用Hierarchy Viewer。简单说就是多次无意义调用onDraw所造成的主线程的性能浪费,可能是帧数下降。
3. onDraw()优化,避免在onDraw里new Paint()等耗时操作,onDraw内仅应当保留必须代码。
六.内存泄漏
1.dump内存进行分析,也可以使用leakcanary库。
2.HashMap避免使用HashCode可变的key
3.谨慎处理Context对象,因为其生命周期由Framework管理,尽量避免私自持有。
4.小心静态变量,及时清除存储在static中的废弃对象。
5.即时释放例如File,Cusor,Stream,Socket等资源对象,因为jni层持有其java层的引用。
6.非静态的匿名内部类。常见于Runnable和Handler。
七.使用性能优秀的Map
1.线程安全的map,ConcurrentHashMap,其使用了分段锁,优化并发性能。
2.使用ArrayMap,空间性能较高。它不是一个适应大数据的数据结构,相比传统的HashMap速度要慢,因为查找方法是二分法,并且当你删除或者添加数据时,会对空间重新调整,在使用大量数据时,效率并不明显,低于50%。
3. SparseArray,二分法加上只能以int为key,性能较高。
以上所述是小编给大家介绍的Android开发性能优化总结网站的支持!
来源:http://blog.csdn.net/ganyao939543405/article/details/52589598


猜你喜欢
- 利用链如下其中LazyMap.get()->ChainedTransformer.transform()-InvokerTransfo
- 在我们移动应用开发过程中,偶尔有可能会接到这种需求:1、在手机桌面创建一个窗口,类似于360的悬浮窗口,点击这个窗口可以响应(至于窗口拖动我
- Unsafe类是啥?Java最初被设计为一种安全的受控环境。尽管如此,Java HotSpot还是包含了一个“后门”,提供了一些可以直接操控
- 目录1、简介2、访问修饰符3、原则总结1、简介访问修饰符是Java语法中很基础的一部分,但是能正确的使用Java访问修饰符的程序员只在少数。
- RSA算法是一种非对称加密算法,那么何为非对称加密算法呢?一般我们理解上的加密是这样子进行的:原文经过了一把钥匙(密钥)加密后变成了密文,然
- 目录简介强引用软引用弱引用虚引用简介从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由
- 引言mysql 和 oracle 插入的时候有一个很大的区别是:oracle 支持序列做 id;mysql 本身有一个列可以做自增长字段。m
- 以下内容通过1、实现目标注入程序,2、实现主程序,3、实现注入函数,4、thumb指令集实现等4个方面详细分析了android中inline
- 流程:Springboot开发过程还有一个是mybatis的依赖测试接口@RestControllerpublic class Hello
- Activity是Android系统的4个应用程序组件之一。通过传统方法显示的Activity都是充满整个屏幕,也就是全屏的Activity
- CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。
- 今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取某部分的硬件信息就
- 一:背景1. 讲故事在前一篇大内存排查中,我们看到了Dictionary正在做扩容操作,当时这个字典的count=251w,你把字典玩的66
- 正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。本文涉及
- C#的多态性:我的理解是:同一个操作,作用于不同的对象时,会有不同的结果,即同一个方法根据需要,作用于不同的对象时,会有不同的实现。C#的多
- 网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类。通过这个类可以连接到指定IP或域名的服务器上,并且可以和
- 本文实例为大家分享了C#实现飞行棋的具体代码,供大家参考,具体内容如下基于Winform框架写的不足之处请大佬指教using System;
- 知识点:1.使用SQL Helper创建数据库2.数据的增删查改(PRDU:Put、Read、Delete、Update)背景知识:上篇文章
- 方法一:using System;using System.Collections.Generic;using System.Compon
- 编译篇 研究Chrome ,首先得把它编译出来,这对于后续的代码分析和阅读有很大的帮助,想想自己编译出一个 Chrome 浏览器来使用,那是