浅谈安卓性能优化
Android的性能优化,主要有以下几个有效的优化方法:
1、布局优化
布局优化:布局优化主要就是要尽量的减少布局嵌套,布局嵌套的少了,Android绘制时的工作量就减少了,所以性能也就提高了。
首先,如果布局中既可以使用LinearLayout和RelativeLayout来布局的话,优先选择LinearLayout来进行布局。因为Relative布局需要花费更多的CPU时间。FrameLayout和LinearLayout布局都是比较高效的,当然,也得具体情况具体分析了。
然后对于重复使用的标题栏可以使用include来复用布局,这样也可以提高开发效率。
2、绘制优化
绘制优化是指View的onDraw方法要避免执行大量的操作,这主要体现在两个方面:1、onDraw中不要创建新的局部对象。一定需要注意避免在这里做创建对象的操作,因为他会迅速增加内存的使用,而且很容易引起频繁的gc,甚至是内存抖动。2、onDraw方法中不要去做耗时的任务,因为这样会使View的绘制过程不流畅。
3、内存泄漏优化
第一、尽量避免写出内存泄露的代码。
第二、利用像leakcanary来找出潜在的内存泄露,然后解决它。
什么是内存泄露 memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
内存泄露原因:
一、Handler 引起的内存泄漏。
解决:将Handler声明为静态内部类,就不会持有外部类SecondActivity的引用,其生命周期就和外部类无关,
如果Handler里面需要context的话,可以通过弱引用方式引用外部类
二、单例模式引起的内存泄漏。
解决:Context是ApplicationContext,由于ApplicationContext的生命周期是和app一致的,不会导致内存泄漏
三、非静态内部类创建静态实例引起的内存泄漏。
解决:把内部类修改为静态的就可以避免内存泄漏了
四、非静态匿名内部类引起的内存泄漏。
解决:将匿名内部类设置为静态的。
五、注册/反注册未成对使用引起的内存泄漏。
注册广播接受器、EventBus等,记得解绑。
六、资源对象没有关闭引起的内存泄漏。
在这些资源不使用的时候,记得调用相应的类似close()、destroy()、recycler()、release()等方法释放。
七、集合对象没有及时清理引起的内存泄漏。
通常会把一些对象装入到集合中,当不使用的时候一定要记得及时清理集合,让相关对象不再被引用。
4、响应速度优化
响应速度的优化的核心思想就是避免在主线程中做耗时操作。如果有耗时操作,我们可以通过开启子线程来执行操作。如果子线程要更新UI,就可以通过Handler和AsyncTask来进行处理。
5、ListView/RecyclerView及Bitmap优化
1、首先可以通过ViewHolder来提高效率。
2、异步加载:耗时的操作放在异步线程里。
3、ListView/RecyclerView的滑动时停止加载和分页加载。
4、然后Bitmap可以通过对图片进行压缩,因为图片太大会导致出现OOM情况的出现
6、线程优化
线程优化的方法就是采用线程池,避免程序中存在大量的Thread。线程池可以重用内部的线程,从而避免了线程的创建和销毁所带来的性能开销。
7、其他性能优化
1、避免过度的穿件对象
2、注册 和解注册要搭配使用
3、尽量使用静态内部类。这样可以避免潜在的由于内部类导致的内存泄漏
4、安装包优化,可以采取像图片处理工具对PNG图片做压缩处理。
这些只是一部分,剩下的再慢慢更新。。。。。。
更多相关文章
- Handler: Service中使用Toast
- android 邮件开发(javax.mail)
- java的 Timer
- Android串口通信(基于Tiny6410平台)
- Android中的消息机制-源码分析
- 经典Android试题及答案
- Android(安卓)Serializable与Parcelable
- Android(安卓)button 性能探讨
- Android(安卓)Studio的基本控件 图片框与进度条