我目前正在尝试像这样实现片段事务动画(片段相关类是从支持库导入的):
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);
时,它可以正常工作。
答案 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;
}