我正在使用滑入/滑出动画进行片段转换。为了平滑这些动画,我通过在动画之前将片段的图层类型设置为View.LAYER_TYPE_HARDWARE
并使动画完成后返回View.LAYER_TYPE_NONE
来使用硬件加速。
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;
}
我最近发现,我的应用程序仅在某些Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
的设备上随机崩溃。我可以将错误范围缩小到图层类型设置为HARDWARE
的行。如果我将其设置为NONE
或SOFTWARE
,一切正常。
我做错了什么?在此先感谢您的帮助!
编辑:这似乎是Android 4.3特有的错误。这些崩溃可以在4.3设备和4.3仿真器(启用主机GPU)上重现。它适用于Android 4.1,4.2.2和4.4。我正在禁用4.3的硬件加速作为解决方法。只有在我的使用情况下处理能力较慢的旧设备才需要硬件加速 - 而且这些设备不太可能具有4.3。但无论如何,如果有人知道如何解决这个问题会很好。