说说Android x包的那些事

前言

项目中引用了一个第三方图片选择库,之前使用一直没有问题,在最近查看后台崩溃记录的时候,发现有一个异常出现的频率很高,最后查看详细信息,发现只有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就不行,而继承AppCompatActivity就可以呢,结果点进去查看源码,发现两个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,发现是没有问题的。

还有几个问题,但是都不怎么用,这里就不列举了。

最后 可能大家会说既然第三方有问题,那你为什么不自己写呢,我想说的是在小公司时间是不允许你来造轮子,也不是人人都有那个能力造轮子。个人意见,说的不对 请轻点喷!!

好了也不多说了,这里主要就是就是想说我们在遇到问题的时候,急是在所难免的,但是急也是解决不了的,自己把出现问题的情况在脑海里重新复盘一下,可能就会发现些蛛丝马迹,可能就是因为没有这点蛛丝马迹导致自己和问题越走越远,希望这篇文章对大家有所启发,文章写的不好,大多是废话,就当是自己记录自己的成长过程吧!

发布了6 篇原创文章 · 获赞 7 · 访问量 7664

猜你喜欢

转载自blog.csdn.net/JumpingError/article/details/104036575