我的Android读书笔记——(4)Android性能优化

本文介绍了Android性能优化的多个方面,包括布局优化、绘制优化、内存泄漏优化等,并详细讲解了如何利用ViewStub提高初始化性能及避免内存泄漏的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《Android开发艺术探索》——Android性能优化

Android性能优化主要包括布局优化、绘制优化、内存泄漏优化、相应速度优化、ListView优化、Bitmap优化、线程优化。

布局优化

布局优化主要是通过减少布局文件的层级实现。其次选择地使用性能较低的ViewGroup,比如RelativeLayout。如果布局中既可以使用LinearLayout

也可以使用RelativeLayout,那么就采用LinearLayout,这是因为RelativeLayout的功能比较简单他的布局过程需要花费更多的CPU时间。FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup。

布局优化的另一种手段就是采用<include>标签、<merge>标签和ViewStub。<include>标签主要用于布局重用,<merge>标签一般和<include>配合使用,他可以减少布局的层级,

而ViewStub则提供了按需加载的功能,当需要时才会将ViewStub中的布局加载到内存中,提高了程序初始化的效率。

ViewStub继承了View,它非常轻量级且宽/高都是0,因此它本身不参与任何的布局和绘制过程。ViewStub的意义在于按需加载所需的布局文件,在实际开发中,有很多布局文件在正常情况下不会显示,比如网络异常时的界面,这个时候就没有必要在整个界面初始化的时候将其加载进来,通过ViewStub就可以做到在使用的时候再加载,提高了程序初始化的性能。一个ViewStub的布局如下

<ViewStub

android:id="@+id/stub_import"

android:inflatedId="@+id/panel_import"

android:layout="@layout/layout_network_error"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="bottom"/ >

其中stub_import是ViewStub的id,而panel_import是layout/layout_network_error这个布局的根元素id,在需要加载ViewStub中的布局时,可以按照如下两种方式进行

((ViewStub) findViewById(R.id.stub_import).setVisibility(View.VISIBLE));

或者View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

当ViewStub通过setVisibility或者inflate方法加载后,ViewStub就会被它内部的布局替换掉,这个时候ViewStub就不再是整个布局结构中的一部分了。

绘制优化

绘制优化是指View的onDraw方法要避免执行大量的操作。首先,onDraw中不要创建局部对象,这是因为onDraw方法可能会被频繁调用,这样会在一瞬间产生大量的临时对象,这不仅占用了过多的内存而且还会导致系统更加频繁的GC,降低了程序的执行效率。另一方面,onDraw方法中不要做耗时的任务,也不能执行成千上万次的循环操作,尽管每次循环都是轻量级,但是大量的循环仍然十分抢占CPU时间片,这样会造成View绘制过程不流畅。按照Google官方给出的性能优化典范中的标准,View的绘制帧率保证60fps是最佳的,这邀请每帧的绘制时间不超过16ms.

内存泄漏优化

内存泄漏一般包含以下几种

1、静态变量导致的内存泄漏。

2、单例模式导致的内存泄漏。

3、属性动画导致的内存泄漏。

4、资源未关闭导致的内存泄漏。

响应速度优化

相应速度优化,就是尽可能的将耗时操作放到非主线程中执行,这样也可以减少ANR.

ListView和Bitmap优化

ListView优化主要通过采用ViewHolder并避免在getView中执行耗时操作;其次要根据列表的滑动状态来控制任务的执行效率;Bitmap优化在下一次介绍。

线程优化

就是避免应用中开启过多的线程,可以通过使用线程池的方式来实现。

关于应用中的内存泄漏问题可以采用Eclipse或者AndroidStudio附带的MAT工具来侦测。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值