Android性能优化
2016-06-29 11:34
344 查看
实际上每个面都可以扩展很多,书中讲的不太多(篇幅少),需要在实际中多去运用.
后面还有MAT的基本使用,我没记,可以去搜,资料不少~
使用
不要创建新的局部对象,因为onDraw可能会被频繁调用,会在一瞬间产生大量的临时对象,会导致占用过多内存,系统更加频繁的gc,降低执行效率
不要做耗时的任务
静态变量导致的内存泄露(比如静态的context,静态的view)
单例模式持有Activity
属性动画(repeatCount为无限模式)
避免存在大量的Thread
重用Thread,避免线程创建和销毁所带来的开销
线程池还能控制最大并发数,避免大量线程因互相抢占系统资源从而导致阻塞
不要过多使用枚举(枚举占用的内存空间要比整型的大)
常量使用
使用一些Android特有的数据结构,比如
适当使用软引用和弱引用
尽量采用静态内部类(不会持有外部类的实例)
代码排版
给非常关键的代码写注释
代码要有层次性,可扩展
Android性能优化典范 - 第4季
Android性能优化典范 - 第3季
Android性能优化典范 - 第2季
Android性能优化典范 - 第1季
前言
Android性能优化主要包括布局优化、绘制优化、内存泄露优化、响应速度优化、ListView优化、Bitmap优化、线程优化以及一些优化建议.实际上每个面都可以扩展很多,书中讲的不太多(篇幅少),需要在实际中多去运用.
后面还有MAT的基本使用,我没记,可以去搜,资料不少~
布局优化
减少布局文件的层级(测量/布局/绘制的时间减少):可以使用RelativeLayout来减少嵌套,从而达到减少层级的目的,另外在相同层级的情况下使用LinearLayout(相比于RelativeLayout更高效)使用
include标签复用,
merge标签降低层级,
ViewStub来实现懒加载,另外补充一个
Space可以用来占位
绘制优化(onDraw)
主要是避免执行大量的操作.不要创建新的局部对象,因为onDraw可能会被频繁调用,会在一瞬间产生大量的临时对象,会导致占用过多内存,系统更加频繁的gc,降低执行效率
不要做耗时的任务
内存泄露优化
其实内存泄露有很多种情况,但是书中列举的比较少静态变量导致的内存泄露(比如静态的context,静态的view)
单例模式持有Activity
属性动画(repeatCount为无限模式)
ListView和Bitmap优化
ListView使用viewholder模式,Bitmap在12章有讲,这里不重复.线程优化
主要是采用线程池(11章有讲)避免存在大量的Thread
重用Thread,避免线程创建和销毁所带来的开销
线程池还能控制最大并发数,避免大量线程因互相抢占系统资源从而导致阻塞
其他的一些性能优化建议
避免创建过多的对象不要过多使用枚举(枚举占用的内存空间要比整型的大)
常量使用
static final来修饰
使用一些Android特有的数据结构,比如
SparseArray和
Pair等,它们都具有更好的性能(注:减少了自动装箱和拆箱的消耗)
适当使用软引用和弱引用
尽量采用静态内部类(不会持有外部类的实例)
提高可维护性
命名规范代码排版
给非常关键的代码写注释
代码要有层次性,可扩展
其他的资料推荐
10-ways-to-improve-your-android-appAndroid性能优化典范 - 第4季
Android性能优化典范 - 第3季
Android性能优化典范 - 第2季
Android性能优化典范 - 第1季
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories