Channel is unrecoverably broken and will be disposed!解决方法外加吐槽

Stars-one 2020年07月13日 4,231次浏览 本篇字数为0字

本文为作者原创,转载请注明出处,谢谢配合
作者:Stars-one
链接:https://stars-one.site/2020/07/13/channelisunrecoverablybrokenandwillbedisposed解决方法外加吐槽


解决方法

我的情况是:布局中使用了google的materialCardView和androidx的CardView导致的冲突

于是统一使用了androidx包中的CardView,问题得以解决

stackflow的回答[Channel is unrecoverably broken and will be disposed!]

下面的你可以不用看了,纯属我自己的吐槽,如果想参考一下我的思考和调试方法,可以继续往下阅读

前言

由于之前我并不想折腾环境,就将Android Studio的SDK版本限定为25,但随着用户渐渐多了起来,很多人向我反馈Android8 9 10会闪退,不能用,于是,我最近将之前的蓝奏云批量下载安卓版进行了高版本的重构,还没有开始修Bug,环境配置就先烦死我了。。

不能直接升级?

Android官方之前使用的support的包,有v4和v7之分,然后为了防止过多的区分,于是Android官方想整合为一个包,于是推出了androidx,这就导致之前的所有的开源项目都得重构。。。

好吧,Android官方也是知道这样重构会让开发者十分的厌烦,便是在新版本的Android Studio推出了一键重构功能,可以将当前使用的support包的项目重构为androidx,于是我也打算使用一下。然后发现,我使用的是support的25版本,重构的时候报了一堆的错,是在转换的时候,说我的kotlin插件不应该存在,删掉的了gradle编译又出现问题。

无奈!!

于是只能采用最笨的方法,复制项目,我创建了一个新的项目,把之前的项目源码一个个复制了过去,然后报错是肯定的,一个个将对应的类改为androidx包中的类,本来以为应该没问题的,但还是出现了问题。(我用到了cardView的这个控件,然后存在有两个版本的CardView,一个是androidx,另外一个则是谷歌的materialCardView,谁知道这两个不兼容!!

苦逼调试

上述的结论是在数十次的调试中才得出的答案。。

刚开始,其他的功能都没有问题,然后我点击了右上角的菜单,想进入到关于界面瞅一眼,然后APP就奇迹的闪退了。。我一头雾水,然后就去看log,本来以为是error级别的错误,但没想到日志没有打印。

然后我去观察了一下verbose级别的日志,终于是找到了出现问题的说明,兴奋地打开了百度去搜索答案,但是答案牛头不对马嘴,我都没有用到JNI,网上文章都是说JNI引起的问题,无语了

由于日志有几条,于是我便是搜索了第二条不一样的日志,直接去stackflow网站去搜索,发现这个问题有竟然有百号人关注,于是便是看了他们的回答

  • 依赖的第三方jar包存在有冲突
  • string等资源文件改动了,但是另外引用的文件没有改变
  • xml布局文件存在问题
  • 显示对话框但不是在前台显示

一一对照了下,也是没有找到原因。

于是猜想是不是startActivity方法出现了问题,因为我是使用的封装好的startActivity的方法,修改为原来的那种用法Intent(this,xxActivity.java.class)的用法,发现没有解决方法。

于是猜想是不是Activity出现问题,于是便是创建了一个新的Activity,发现startActivity方法可以打开

我是在菜单栏上点击某个选项才跳转到Activity,和上面的前台显示似乎有所关联,于是尝试了一下打开我新建的Activity,发现可以成功跳转,排除不是这个的问题。

于是最后猜测xml布局出现问题,于是只留个Toolbar控件,发现能够正确显示。

然后一个个的进行测试,我使用了圆形头像框,以为是内存过大而引起的问题,试了试,这个问题。

于是想进入Android Studio调试模式,但是手机却莫名其妙的卡在了waiting for debugger界面了,去搜了一下解决方法,一一试过都没有结果

好吧,换一条路,我直接打包测试,然后就测试N多次,下面的截图只是截取了后面的部分

忽然想到回答有说冲突和xml布局错误,于是我想到了之前改控件的时候,好像是改为了google那边的materialCardView,然后我一改,测试,终于是通过了,真是太坑了吧,到底是用哪个包比较好呢?这个问题我还不知道答案,之后我了解之后再补充说明