Android 碎片转换动画的硬件加速崩溃
我正在使用滑入/滑出动画进行片段转换。为了平滑这些动画,我正在使用硬件加速,将片段的层类型设置为Android 碎片转换动画的硬件加速崩溃,android,android-animation,hardware-acceleration,android-4.3-jelly-bean,Android,Android Animation,Hardware Acceleration,Android 4.3 Jelly Bean,我正在使用滑入/滑出动画进行片段转换。为了平滑这些动画,我正在使用硬件加速,将片段的层类型设置为视图。在动画之前设置层类型\u硬件,如果动画完成,则设置回视图。层类型\u无 public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { if (getFragmentManager().getBackStackEntryCount() == 0) { return
视图。在动画之前设置层类型\u硬件
,如果动画完成,则设置回视图。层类型\u无
public Animation onCreateAnimation(int transit, boolean enter, int
nextAnim) {
if (getFragmentManager().getBackStackEntryCount() == 0) {
return super.onCreateAnimation(transit, enter, nextAnim);
}
if (nextAnim == 0) {
nextAnim = enter ? android.R.anim.slide_in_left :
android.R.anim.slide_out_right;
}
Animation animation = AnimationUtils.loadAnimation(getActivity(),
nextAnim);
// smoothening animations
if (animation != null) {
getView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation animation) {
if (getView() != null) {
getView().setLayerType(View.LAYER_TYPE_NONE, null);
}
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
}
return animation;
}
我最近发现,我的应用程序在某些转换上随机崩溃,只有在0x00000000(code=1)处有致命信号11(SIGSEGV)的一些设备上。我可以将错误缩小到图层类型设置为HARDWARE
的行。如果我将其设置为NONE
或SOFTWARE
一切正常
我做错了什么?提前感谢您的帮助
编辑:这似乎是Android 4.3特有的bug。这些崩溃可以在4.3设备和4.3仿真器(启用主机GPU)上重现。在安卓4.1、4.2.2和4.4上都可以
我正在禁用4.3的硬件加速作为解决方法。在我的使用案例中,只有处理能力较慢的旧设备才需要硬件加速,而这些设备不太可能有4.3版本。但无论如何,如果有人知道这是如何解决的,那就太好了。你能告诉我如何禁用硬件加速吗?刚刚找到另一个位置:删除那些行getView().setLayerType(View.LAYER\u TYPE\u hardware,null)它对我有效=)是的,就我记忆所及,这就是我禁用硬件加速的方式