Android硬件加速提升用户体验

Android系统与IOS系统相比一个重要的缺点就是,IOS系统运行起来会更加流畅,这是Android系统用户体验不如IOS的原因之一。当然,Android系统也可以通过一系列的优化,来确保运行的流畅。

为了避免迟缓的UI效果或者运行的停顿,必须确保动画一直运行在每秒60帧。我们可以从硬件和软件两个方面来进行优化。

一、硬件加速

Android通过GPU来进行硬件加速。GPU,全称 Graphic Processing Unit,即“图形处理器”。它是相对于CPU的一个概念,是专门进行图像处理的核心处理器。绝大部分Android设备都有GPU。

因为启用硬件加速会消耗更多的资源和内存,而且硬件加速并不支持所有的2D动画效果,所以应该仅在需要的时候才使用硬件加速。

注意:在Android 4.0(API 级别 14)以上版本中,默认对所有应用程序都开启了硬件加速。

1、硬件加速级别

有四种级别:Application、Activity、Window、View

Application 层

首先将目标API设为11以上,然后在在AndroidManifest.xml文件里,添加以下属性到<application>标签里,针对整个应用开启硬件加速:

<uses-sdk android:targetSdkVersion="11" />
<application android:hardwareAccelerated="true" ...>

开启硬件加速最简单的方法是在整个应用全局设置。如果应用只使用标准的View和Drawable,全局设置不会产生不利的影响。然而,因为硬件加速不支持所有的2D绘制操作,开启会影响一些自定义View或者绘制调用。问题显示为不可见的元素、异常,或者错误渲染像素。如果你的应用执行自定义绘制,开启硬件加速,测试应用在实际的硬件设备上去查找问题。

Activity 层

如果整个应用开启硬件加速表现的不稳定,也可以针对单个Activity进行控制。在Activity层开启或者关闭硬件加速,可以使用android:hardwareAccelerated属性在<activity>标签内。下面是单个Activity中关闭硬件加速的例子:


<application android:hardwareAccelerated="true">
    <activity ... />
    <activity android:hardwareAccelerated="false" />
</application>


可以在全局设置硬件加速,然后再针对单个Activity关闭硬件加速。


Window 层

如果你需要更细致的控制,可以在获得的Window里开启硬件加速:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);


注意:在window层不能取消硬件加速。


View 层


通过下面代码,你可以在运行时关闭硬件加速:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
 

或者在view中加入属性:

android:layerType="software"

二、软件加速

在Android应用程序中,GUI线程不仅承担了绘制所有View的任务,还负责处理与用户的交互。所以,如何GUI线程忙于刷新View的话,它响应用户操作就会变慢,我们都知道,如果响应用户时间超过5s,程序就会报ANR错误,这是一种非常不好的用户体验。

为了解决这一类问题,可以使用以下几种方法:

1、软件加速。如上,在view中加入属性:

android:layerType="software"
则会使用一种软件的方式加速,我们知道,硬件加速有可能导致渲染错误,所以可以选用这种方式来进行加速。

2、使用SurfaceView,它使用后台线程控制并刷新View,使GUI线程能去执行其他计算任务。

3、使用TextureView,SurfaceView虽然改善了应用程序的性能,但它无法实现图像变换,换句话说,SurfaceView无法实现移动、缩放或旋转。但是TextureView可以支持普通的View操作。但是,值得注意的是:TextureView仅能用于启用了硬件加速的窗口,否则就绘制不出任何东西。


三、资料

Hardware Acceleration(android English API )    http://developer.android.com/guide/topics/graphics/hardware-accel.html

Android 4.0的图形硬件加速及绘制技巧(2)   http://mobile.51cto.com/hot-302203_1.htm

android图形系统详解六:View layer   http://www.2cto.com/kf/201204/127664.html

控制硬件加速:http://blog.csdn.net/niu_gao/article/details/7443574




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值