片段动画后的致命信号11

时间:2014-11-27 20:30:22

标签: android android-fragments android-animation

我目前正在尝试像这样实现片段事务动画(片段相关类是从支持库导入的):

FragmentTransaction trans = getFragmentManager().beginTransaction();
trans.setCustomAnimations(R.anim.slide_in,R.anim.slide_out);
trans.replace(R.id.preview_panel, fragment);
trans.commit();

动画的定义如下:

slide_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="-100%p"
        android:toXDelta="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:duration="500"/>
</set>

slide_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="-100%p"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="500"/>
</set>

现在,每当我运行一段代码时它运行正常。但是,当我再次运行它时,应用程序崩溃并出现以下错误:

Fatal signal 11 (SIGSEGV) at 0xff000008 (code=1), thread 11015

每当我删除setCustomAnimations行时,这段代码每次运行时都能正常工作。这可能是什么问题,我怎么能够解决/解决它?

编辑:管理以稍微缩小问题范围:

当被替换的片段包含带有this StackOverflow answer所示的VideoEnabledWebChromeClient的webview时,会发生这种情况。

错误也只发生在淡出动画上(这就是为什么它似乎只是第二次出现)。当我将动画更改为trans.setCustomAnimations(R.anim.eqdpost_slide_in,0);时,它可以正常工作。

2 个答案:

答案 0 :(得分:2)

我遇到了类似问题,我通过将support-v4库升级到23.1.0(来自23.0.1)解决了这个问题:

compile 'com.android.support:support-v4:23.1.0'

答案 1 :(得分:1)

找出导致此问题的原因。

参与事务的片段中的这个方法是在幻灯片动画发生时触发的:

   @Override
    public void onDestroyView() {
        super.onDestroyView();
        _webView.destroy();
        _webView = null;
    }

_webView.destroy()调用从内存中释放webview。但是,出于某种原因,_webView = null;语句并不仅仅将_webView指针设置为null,它还会在将_webView指针设置为null之前在本机级别上调用webview上的destroy()方法。 因为在调用_webView = null;后webview已被销毁,所以它出现了本机错误。

如下所示更改方法可解决问题:

    public void onDestroyView() {
        super.onDestroyView();
        _webView = null;
    }