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

标签:android,性能,优化
0
投稿

猜你喜欢

  • BeanDefinitionRegistryPostProcessor如何动态注册Bean到Spring

    2023-11-24 12:56:16
  • Java图像之自定义角度旋转(实例)

    2023-10-07 21:04:28
  • Java多线程下解决数据安全问题

    2022-05-16 04:48:45
  • java判断字符串是否为数字的方法小结

    2023-11-25 05:54:52
  • winform绑定快捷键的方法

    2023-12-10 22:16:04
  • C#多线程中的互斥锁Mutex

    2022-04-26 06:11:55
  • java 使用Scanner类接收从控制台输入的数据方式

    2023-10-23 08:54:57
  • IDEA GIT 忽略文件的最佳方式推荐

    2023-04-06 10:02:54
  • Java异常处理中同时有finally和return语句的执行问题

    2022-08-14 15:28:30
  • Spring Boot启动端口修改方法

    2022-11-21 19:37:53
  • 简单了解JAVA public class与class区别

    2023-11-15 23:59:26
  • C# winform 请求http的实现(get,post)

    2023-03-20 13:52:01
  • Java实现TopK问题的方法

    2023-11-10 20:32:14
  • Spring Cloud集成Nacos Config动态刷新源码剖析

    2022-04-16 11:35:13
  • Java迭代器与Collection接口超详细讲解

    2022-07-14 05:10:49
  • 详解Elasticsearch如何实现简单的脚本排序

    2022-03-13 13:17:50
  • C# 多线程编程技术基础知识入门

    2023-05-27 08:00:24
  • C语言实现自定义扫雷游戏(递归版)

    2023-11-03 02:12:36
  • JDK源码之PriorityQueue解析

    2022-05-15 17:17:15
  • Java读写文件创建文件夹多种方法示例详解

    2022-11-17 01:08:48
  • asp之家 软件编程 m.aspxhome.com