这两天发现,小米1+上,图文详情老是闪退,好吧,商品详情问题还是挺多的
报错信息是:
07-24 09:59:08.601: W/crash_handler(6887): Caught a crash, signum=11
07-24 09:59:08.601: E/webcore(6887): Report WebCore crash to the ErrorReportUtils at:Fri Jul 24 09:59:08 格林尼治标准时间+0800 2015
07-24 09:59:09.621: A/libc(6887): Fatal signal 11 (SIGSEGV) at 0x00001ae7 (code=0), thread 6887 (.android.member)
查了一下,是因为图文详情内容过长,且都是图片,然后小米1+默认开启了硬件加速导致,关闭硬件加速后,正常。
这里稍微提一下就是该放到哪个级别去控制,如果放到Activity的话,有些手机或者有些android版本会导致显示效果不好,如黑屏,锯齿等等,最好放到容易出问题的View上。
下面是硬件加速的详细介绍
从Android3.0(API Level 11)开始,Android 2D渲染管道能够更好的支持硬件加速。硬件加速执行的所有的绘图操作都是使用GPU在View对象的画布上来进行的。因为启用硬件加速会增加资源的需求,因此这样的应用会占用更多的内存。
启用硬件加速的最容易的方法是给整个应用程序都打开全局硬件加速功能。如果应用程序只使用标准的View和Drawable,那么打开全局硬件加速不会导致任何的不良的绘制效果。但是,因为硬件加速并不支持所有的2D图形绘制操作,所以对于那些使用定制的View和绘制调用的应用程序来说,打开全局硬件加速,可以会影响绘制效果。问题通常会出现在对那些不可见的元素进行了异常或错误的像素渲染。为了避免这种问题,Android提供以下级别,以便可选择性的启用或禁止硬件加速:
1. Application
2. Activity
3. Window
4. View
如果应用程序执行了定制化的绘图,就要在实际的带有硬件加速的硬件设备上测试,以便发现问题。
控制硬件加速
能够用以下级别来控制硬件加速
Application级别
在应用的Android清单文件中,把下列属性添加到元素中,来开启整个应用程序的硬件加速。
Activity级别
如果应用程序不能够正确的使用被打开的全局硬件加速,那么也可以对Activity分别进行控制。在元素中使用android:hardwareAccelerated属性,能够启用或禁止Activity级别的硬件加速。以下示例启用全局的硬件加速,但却禁止了一个Activity的硬件加速:
Window级别
如果需要更细粒度的控制,就可以使用下列代码来针对给定的窗口来启用硬件加速:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
注意:当前不能在Window级别禁止硬件加速。
View级别
能够使用下列代码在运行时针对一个独立的View对象来禁止硬件加速:
myView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
注意:当前不能在View级别开启硬件加速。View层除了禁止硬件加速以外,还有其他的功能,更多的相关信息请看本文的“View层”。