前言
项目中引用了一个第三方图片选择库,之前使用一直没有问题,在最近查看后台崩溃记录的时候,
发现有一个异常出现的频率很高,最后查看详细信息,发现只有Android 10的版本才会出现此问
题,最后去github上查看issuse,发现这个问题已经修复了,于是我就尝试着升级第三方库的版
本,结果升级和本地项目冲突了,最后又仔细去看,发现是因为他们的最新版本已经迁移到
Android x包了,我要想继续使用他们的库,就只能迁移我本地的版本,迁移也还是很简单的,整
个过程只用了半个小时,但是处理问题却用了足足两天时间,下面我来说说遇到的问题:
一 国际化语言切换失败
升级之后发现在切换多语言的时候无效,代码也一直还是原来的,没有做过任何修改,但是设置了
新的语言之后呢却不生效,也就是这个问题困扰了我一天,绞尽脑汁代码一遍又一遍地读,却还是
没有发现问题所在,最后发现我有两个activity设置语言之后是生效的,仔细查看是因为这两个
activity是继承至 android.app.Activity,而我其他的页面却是继承至 AppCompatActivity,于是就新
建了一个项目,将设置语言的代码复制过去,发现设置了语言还是不生效,这就让我越来越摸不着
头脑了,同样的代码上一个版本还是生效的,突然发了一个新版就不起作用了?几乎都要放弃了,
此时我的脑海里也不断地浮现出一句话“我是否适合干Android呢?”,无奈在自己所在的一个
Android技术群里去资讯这个问题,结果根本就没人解答,就是一大堆人在闲聊,好好的技术群聊
的却是些和技术毫无关系的话题,好吧我放弃了!最后到了下班也还没有确定问题所在,以至于晚
上吃饭都食之无味,味同爵蜡,自己整个一晚上情绪都很低落,晚上睡在床上仔细想了一下今天的
整个过程,突然想到今天还做过一件事,那就是迁移了Android 包,心想是不是因为和这有关系
呢,是不是因为继承的activity是Android x包下面的呢,于是就抱着这一点希望在一整天的疲惫下
进入了梦乡,早上来的第一件事就开始打开项目查看继承的activity 确实是继承至Android x包下面
的AppCompatActivity,马上就觉得自己离真相不远了,于是修改继承包,重新导入
android.support下面的activity,重新编译运行之后,发现生效了,此时自己的心情真是难以平静,
如释重负,双手脱离键盘,捂在脸上,久久不能平复。但是心想自己的项目已经不能在回退到
android.support了怎么办呢,此时刚获得的喜悦瞬间跌落低谷,在时间的驱动下又开始想,于是又
想既然继承AppCompatActivity不管用,那么就继承其他的好了 直接继承至activity如何呢,试了一
下也可以,但是我的项目里面确是不能继承activity的啊 !因为里面有fragment,那又继续尝试,
那就继承FragmentActivity吧,抱着尝试的心态试了一下,结果还真行,于是赶快修改自己项目的
baseactivity继承至FragmentActivity,运行之后,果然有效,至此这个问题用了我一天的时间终于
解决了,但是我又迎来了新的烦恼,为什么自己那么菜呢,这么简单的一个问题为什么花费了这么
多时间了,为什么继承AppCompatActivity就不行,而继承FragmentActivity就可以呢,结果点进去
查看源码,发现两个activity使用的context引用是不一样的,继承关系也不一样, Android 7切换语
言是通过重新更新context而达到修改语言的目的,而恰好AppCompatActivity里面更新context的方
法已经被重写了,不能重新创建,于是就没法更新。导致设置语言无效,好了这个问题就到此结束
了。
二 广播注册接收失败
项目提了一个新的需求,需要监听用户按下home键以及多任务键,好嘛,我说这个简单分分钟给
你搞定,结果一通代码写下来之后发现不起作用,这就把人尴尬了,脸被打的啪啪的,试了很多方
法,百度发现我写的和网上的没什么区别,这就奇了怪了,于是把自己的代码删了,复制一份网上
的,发现还是不行,这下是没辙了,心想是不是手机版本太高,被厂家做了处理,于是找来了一个
三年钱的手机,Android 6.0的,发现也还是不行,最后发现我使用的是
LocalBroadcastManager.getInstance(mContext).registerReceiver,而这个包是Android x底下的,
此时心理已经在萌生对Android x的怀疑了,在新项目中继续监听,发现也不行,噢 忘记修改导包
了,于是修改到android.support包下面,发现可以,原来又是Android x的问题,这两天是怎么了
感觉自己和Android x杆上了,无奈我的项目已经导入了Android x没法继续使android.support包
了,于是就更换注册广播的形式,不用本地广播了,就用全局的注册了,
mContext.registerReceiver,发现是没有问题的。
还有几个问题,但是都不怎么常用,这里就不列举了。
最后 可能大家会说既然第三方有问题,那你为什么不自己写呢,我想说的是在小公司时间是不允
许你来造轮子,也不是人人都有那个能力造轮子。个人意见,说的不对 请轻点喷!!
好了也不多说了,这里主要就是就是想说我们在遇到问题的时候,急是在所难免的,但是急也是解
决不了的,自己把出现问题的情况在脑海里重新复盘一下,可能就会发现些蛛丝马迹,可能就是因
为没有这点蛛丝马迹导致自己和问题越走越远,希望这篇文章对大家有所启发,文章写的不好,大
多是废话,就当是自己记录自己的成长过程吧!