线上崩溃java.lang.IllegalStateException Fragment FullScreenImageViewerDialogFragment{2998a4f} (e029c2a1-c25e-4b63-a883-22f4197f941f) not associated with a fragment manager.
githubliangzai opened this issue · 10 comments
main(1)
java.lang.IllegalStateException
Fragment FullScreenImageViewerDialogFragment{2998a4f} (e029c2a1-c25e-4b63-a883-22f4197f941f) not associated with a fragment manager.
解析原始
1
androidx.fragment.app.Fragment.getParentFragmentManager(Fragment.java:1040)
2
androidx.fragment.app.DialogFragment.dismissInternal(DialogFragment.java:350)
3
androidx.fragment.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:317)
4
com.github.iielse.imageviewer.utils.TransitionEndHelper$end$doTransition$1$1$1.onTransitionEnd(TransitionEndHelper.kt:34)
5
androidx.transition.Transition.end(Transition.java:1952)
6
androidx.transition.TransitionSet$TransitionSetListener.onTransitionEnd(TransitionSet.java:451)
7
androidx.transition.Transition.end(Transition.java:1952)
8
androidx.transition.Transition$3.onAnimationEnd(Transition.java:1901)
9
android.animation.Animator$AnimatorListener.onAnimationEnd(Animator.java:554)
10
android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1242)
11
android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1484)
12
android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:146)
13
android.animation.AnimationHandler.access$100(AnimationHandler.java:37)
14
android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:54)
15
android.view.Choreographer$CallbackRecord.run(Choreographer.java:1055)
16
android.view.Choreographer.doCallbacks(Choreographer.java:875)
17
android.view.Choreographer.doFrame(Choreographer.java:772)
18
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1042)
19
android.os.Handler.handleCallback(Handler.java:888)
20
android.os.Handler.dispatchMessage(Handler.java:100)
21
android.os.Looper.loop(Looper.java:213)
22
android.app.ActivityThread.main(ActivityThread.java:8178)
23
java.lang.reflect.Method.invoke(Native Method)
24
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
25
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
bug 我这边 复现了,应该找到原因了, 马上解决
implementation 'com.github.iielse:imageviewer:2.1.8'
试下这个
大佬威武
已经用最新的版本了,我再观察下还会不会崩溃,具体原因是啥额,是执行退出动画的时候DialogFragment被销毁了么,但是什么情况下会导致执行退出动画时DialogFragment被销毁呢
上面是因为在 dialogFragment onDestroyView后了, 还在调用 fragment.dismissAllowingStateLoss() 崩溃的. 我自测是在 onRelease方法中直接调用 activity.finish() 触发了的.
解决方案是监听 fragment的声明周期,onDestroyView后加个标记.
fun end(fragment: DialogFragment, startView: View?, holder: RecyclerView.ViewHolder) {
beforeTransition(startView, holder)
val doTransition = {
TransitionManager.beginDelayedTransition(holder.itemView as ViewGroup, transitionSet().also {
it.addListener(object : TransitionListenerAdapter() {
override fun onTransitionStart(transition: Transition) {
animating = true
}
override fun onTransitionEnd(transition: Transition) {
if (!animating) return // 这里
animating = false
fragment.dismissAllowingStateLoss()
}
})
})
transition(startView, holder)
}
holder.itemView.post(doTransition)
fragment.lifecycle.addObserver(object : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
fragment.lifecycle.removeObserver(this)
animating = false // 这里
holder.itemView.removeCallbacks(doTransition)
TransitionManager.endTransitions(holder.itemView as ViewGroup)
}
})
}
好的,麻烦大佬了
怎么样了,小哥,还有吗
有问题再打开
没有再发现崩溃了
ok