遇见的bug合集:
1.错误信息:
Activity {com.qingli.qlsq.cc/com.xxxy.domestic.ui.AppInterstitialActivity} did not call through to super.onCreate()
形成原因:在onCreate没有调用super.onCreate(savedInstanceState)就return和finish
解决:super.onCreate放在return和finish之前
2.错误信息:
java.util.ConcurrentModificationException java.util.HashMap$HashIterator.nextNode(HashMap.java:1453) java.util.HashMap$KeyIterator.next(HashMap.java:1477) com.android.internal.util.XmlUtils.writeSetXml(XmlUtils.java:362) com.android.internal.util.XmlUtils.writeValueXml(XmlUtils.java:700) com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:307) com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:276) com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:242) com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:199) android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:778) android.app.SharedPreferencesImpl.access$900(SharedPreferencesImpl.java:55) android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:647) android.app.QueuedWork.processPendingWork(QueuedWork.java:264) android.app.QueuedWork.access$000(QueuedWork.java:50) android.app.QueuedWork$QueuedWorkHandler.handleMessage(QueuedWork.java:284) android.os.Handler.dispatchMessage(Handler.java:107) android.os.Looper.loop(Looper.java:213) android.os.HandlerThread.run(HandlerThread.java:67)
形成原因:sp获取的hashset的值被改变
解决方法:使用,分隔的方式避免使用hashset放在sp被改变
3.
java.lang.AbstractMethodError: abstract method "void com.google.android.exoplayer2.Player$EventListener.onRepeatModeChanged(int)" at com.google.android.exoplayer2.ExoPlayerImpl.lambda$setRepeatMode$1(ExoPlayerImpl.java:299) at com.google.android.exoplayer2.-$$Lambda$ExoPlayerImpl$tGV_XqXG6_HwwroKzxWphBtarXU.invokeListener(Unknown Source:2) at com.google.android.exoplayer2.BasePlayer$ListenerHolder.invoke(BasePlayer.java:182) at com.google.android.exoplayer2.ExoPlayerImpl.invokeAll(ExoPlayerImpl.java:845) at com.google.android.exoplayer2.ExoPlayerImpl.lambda$notifyListeners$6(ExoPlayerImpl.java:726) at com.google.android.exoplayer2.-$$Lambda$ExoPlayerImpl$b59raXxaB-trjwE5bgpZInm1QnU.run(Unknown Source:4) at com.google.android.exoplayer2.ExoPlayerImpl.notifyListeners(ExoPlayerImpl.java:736) at com.google.android.exoplayer2.ExoPlayerImpl.notifyListeners(ExoPlayerImpl.java:726) at com.google.android.exoplayer2.ExoPlayerImpl.setRepeatMode(ExoPlayerImpl.java:299) at com.google.android.exoplayer2.SimpleExoPlayer.setRepeatMode(SimpleExoPlayer.java:1222) at com.fun.mango.video.player.custom.exo.a.a(SourceFile:16) at com.fun.mango.video.c.b.g.A(SourceFile:1) at com.fun.mango.video.c.b.g.l(SourceFile:6) at com.fun.mango.video.player.custom.exo.TinyVideoView.j(SourceFile:1) at com.fun.mango.video.c.b.g.x(SourceFile:10) at com.fun.mango.video.tiny.TinyVideoFragment.onResume(SourceFile:5)
解决方法:gradle.properties 里加个 android.enableDexingArtifactTransform=false
org.greenrobot.eventbus.EventBusException: Subscriber class lc.po and its super classes have no public methods with the @Subscribe annotation
原因:当前页面eventbus注册,但是没有接收的方法
java.lang.IllegalStateException: Fragment LoadingProgressDialog{edf5754} (419c361f-f0db-4b1e-be78-23eb3162ef4d) has not been attached yet.
原因有:获取getChildFragmentManager没有attached,即mHost为空
源码深层次问题:fragment的mHost为空,mHost的赋值在onCreateView和moveToState里面
可能出现的情况: 获取getChildFragmentManager错误,一般容易出现在使用kotlin时出现,尤其是两个fragment嵌套,在apply或let方法直接使用show或context方法
解决:寻找正确的childManager,如果使用kotlin要将show和获取context的放在外部调用
6. 06-01 14:57:46.059 10325 10325 E AndroidRuntime: java.lang.IllegalStateException: Fragment VideoPlayFragment{45451fb} (b7a878c2-896e-4767-b694-8f1fb513ba02) not attached to an activity. 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at androidx.fragment.app.Fragment.requireActivity(Fragment.java:928) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at com.xlxx.colorcall.video.ring.ui.home.hot.VideoPlayFragment$prepareViewAndData$1.onChanged(VideoPlayFragment.kt:312) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at com.xlxx.colorcall.video.ring.ui.home.hot.VideoPlayFragment$prepareViewAndData$1.onChanged(VideoPlayFragment.kt:65) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at androidx.lifecycle.LiveData.setValue(LiveData.java:309) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at androidx.lifecycle.LiveData$1.run(LiveData.java:93) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:789) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:98) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at android.os.Looper.loop(Looper.java:164) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6590) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 06-01 14:57:46.059 10325 10325 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
原因:在activity没有启动fragment时调用相关的资源,常见于粘性的观察者(eventbus或Viewmodel)或异步调用
解决问题:观察者或异步调用是加入isadd多加判断。如果在fragment被销毁重新创建则在初始化完成时进入新的判断