欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程开发之性能优化

程序员文章站 2022-04-22 11:05:39
性能优化是很大的学问,不比frame work层内核层简单多少,这里仅仅列出常见的 代码 位运算 ? 布局 1层最好 include+merge(比如同方向Linear...

性能优化是很大的学问,不比frame work层内核层简单多少,这里仅仅列出常见的

代码

位运算

?

布局

1层最好

include+merge(比如同方向LinearLayout,可以用merge)

view stub(需要指定一个inflatedId),inflate和设置visible都可以

?

绘制

onDraw避免大量操作,也避免耗时操作,因为onDraw会被频繁调用(有局部刷新的办法吗)

?

滑动控件

使用小细节,如recycler view数据集变化部分更新

滑动时停止网络请求

少用wrap_content,固定宽高居中最好

?

图片

压缩+3重cache(好好学习Glide最好)

?

内存泄漏

静态

单例(和Application同生命周期)不解绑

属性动画.cancel(动画持有view,view持有context)

匿名内部类

非静态内部类

?

线程池优化

Pair

SparseArray系列

多采用软弱引用

采用缓存

界面不可见释放内存

1.? @Override??

2.? public?void?onTrimMemory(int?level)?{??

3.? ????super.onTrimMemory(level);??

4.? ????switch?(level)?{??

5.? ????case?TRIM_MEMORY_UI_HIDDEN:??

6.? ????????//?进行资源释放操作??

7.? ????????break;??

8.? ????}??

9.? }??

TRIM_MEMORY_RUNNING_MODERATE内存已经有点低了,系统会根据LRU来杀进程了

TRIM_MEMORY_RUNNING_LOW内存已经非常低了,释放部分不必要的东西

TRIM_MEMORY_RUNNING_CRITICAL已经根据LRU杀掉大部分缓存进程了,所有不必要的都应该释放

如果这个程序是缓存的:

TRIM_MEMORY_BACKGROUND

TRIM_MEMORY_MODERATE

TRIM_MEMORY_COMPLETE

少使用枚举

减少类(500B)和对象(12-16B);少创建临时对象,可以避免频繁GC

谨慎抽象

谨慎注解

ProGuard混淆、压缩、优化代码

谨慎开启第二个进程,如音乐播放器

1.?

2.? ?????????android:process=":background"?/>??

在网络频繁请求的应用中,维护一个全局网络请求者实例,如Retrofit。

用StringBuffer或StringBuilder拼接String而不是+号,如果方法返回值是String,而且明确他会拼接,返回一个StringBuffer是一个不错的选择

当不需要下标的时候,采用增强for循环,array list不要用增强for循环

采用原生API,考验对原生API的了解程度,大部分情况,都比自己临时写的快

getter/setter、Book.bookName后者要快3-7倍,前者更符合OOP,孰优孰劣?