崩溃与片段转换动画的硬件加速

时间:2013-11-25 09:46:31

标签: android android-animation hardware-acceleration android-4.3-jelly-bean

我正在使用滑入/滑出动画进行片段转换。为了平滑这些动画,我通过在动画之前将片段的图层类型设置为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的行。如果我将其设置为NONESOFTWARE,一切正常。

我做错了什么?在此先感谢您的帮助!

编辑:这似乎是Android 4.3特有的错误。这些崩溃可以在4.3设备和4.3仿真器(启用主机GPU)上重现。它适用于Android 4.1,4.2.2和4.4。

我正在禁用4.3的硬件加速作为解决方法。只有在我的使用情况下处理能力较慢的旧设备才需要硬件加速 - 而且这些设备不太可能具有4.3。但无论如何,如果有人知道如何解决这个问题会很好。

0 个答案:

没有答案