关于手机PDA换了型号导致APP部分按钮点击闪退的问题

前段时间工作上遇到一个问题,过去了几个星期了,一直没时间整理,今天得空记录一下。
问题是关于公司上古流传下来的一个陈旧的项目,同事换了其他厂家的手机PDA后使用,并且android版本从原来的4.3.1变成4.4.4后,APP出现闪退的问题,点击其中部分按钮就会弹出“XXapp停止运行”的提醒,我需要查找原因解决这个问题,LogCat报以下异常:

解决问题的心路历程

问题到我手上的时候,唯一传达到的信息就是扫描头调用有问题,android版本升级导致app版本不匹配,不知道这是老大的预判还是前开发者给出的反馈。到我手上后首先在adt-bundle(虽然这个IDE有点过时,现在都使用Android Studio的多,不过确实很好用,不用过多配置打开eclipse就可以用起来,如果要使用模拟器,无非是多下载一个相应版本的system-image和platforms放在sdk中)上把项目跑起来。

  • 真机调试时登录都是正常的,到了主页面点击按钮的时候出现了闪退,并且APP被强制停止运行
    首先都还没到扫描邮件号这一个步骤,就已经出现了异常,无法说通过改代码去判断是否广播这一块有问题;再者我配置了4.3.1的模拟器,在电脑上运行,出现的是和真机调试一模一样的异常,所以排除是android升级而导致的问题。
    询问了一个专门做android开发的朋友,看了我的异常信息后,判断可能是adt-bundle这个IDE过于老旧,缺少一些必要的插件,导致运行异常,建议我安装最新版的Android Studio,跑一下试试。没想到这又是一条看不到头的路,一路安装下来很顺利,包括配置模拟器和sdk,然而手上的adt项目要转成gradle项目导入到Android Studio中的话,总是会创建失败,虽然根据网上的方法对项目进行了转化,还是不行,Android Studio也重装了无数次,甚至还专门fq去装AS,怕安装过程中由于国内网络问题漏下载东西,无果。。。同事也说,我这个应该就是ide配置的问题!
    冷静下来想想,感觉目前有点偏离解决问题的主线了,第一,需要解决的问题是PDA硬件和apk软件的匹配问题,在换了机子前一直是正常的,换了机子后才出现问题,说明软件是不会有问题的;第二,PDA是新的更不会有问题,只是匹配有问题;第三,更加不可能是我IDE导致了这个异常,即使有,也应该在解决软硬件匹配问题后,再最后来考虑IDE的问题,毕竟已经在adt-bundle上已经可以跑起来了,为什么不能从此先入手???

  • 页面跳转的逻辑是否有问题
    所以根据自己的直觉判断,改变了查找问题的方向,从当下最直白的问题入手,点击按钮只是实现页面跳转而已,并没有其他任何操作,既然这时闪退,是不是页面跳转写的不对。好的,立马根据原开发者的写法写了一个空白页面的跳转,咦?非常流畅和正常,并无任何问题,所以并不是页面跳转的问题,排除。。。
    至此,我极度怀疑是不是原开发者打包项目的时候,漏了什么jar包,封装类。通过曲折的过程联系到了原开发者,首先确认项目是完整的,然后指了一条路,应该是换了新机子后硬件不一样,原先的调用方法是不可用的了,应该根据新机子的硬件重新开发部分功能,联系现厂家获取匹配的SDK,哇,瞬间看到了胜利的曙光。
    而后从厂家得到的sdk无非就是广播名称和接受码值字段这些东西,就是一个扫描广播而已啊。在空白页面里测试了一番,果然可以正常扫描了,好吧,进入源代码改成自己例子写的扫描方式吧!然而又回到老问题,目前是页面跳转就直接出问题了,谈何扫描???继续顺藤摸瓜地尝试。。。

  • 跳转后的页面预加载的内容是否有问题
    页面跳转的下一步自然是加载新页面了,那问题很可能就出在新页面上吧,火速把新页面的后端代码调出来,emmmm,然后是在onResume()中发现了一些不明所以的东西如下所示:

 private ScanManager mScanManager;private SoundPool soundpool = null;@Overrideprotected void onResume() {super.onResume();initScan();IntentFilter filter = new IntentFilter();filter.addAction(SCAN_ACTION);registerReceiver(mScanReceiver, filter);}private void initScan() {mScanManager = new ScanManager();mScanManager.openScanner();soundpool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 100); // MODE_RINGTONEsoundid = soundpool.load("/etc/Scan_new.ogg", 1);}

所以是initScan()中调用了一些新PDA没有的硬件,比如上面的ScanManager和SoundPool,把调用initScan()部分注释掉,再运行居然就可以正常跳转了,天哪,一把辛酸泪!!!不过,当跳转到新页面后使用扫描功能时,还是会发生闪退的异常,不过这次只是跳回主界面,而没有使得APP强制停止运行。好的,现在思路终于基本清晰了,主要就是硬件不同的问题,和android版本,代码逻辑,jar包都没有太大关系。观察扫描接收器:

 private BroadcastReceiver mScanReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {isScaning = false;soundpool.play(soundid, 1, 1, 0, 0, 1);byte[] barocode = intent.getByteArrayExtra("barocode");byte[] barcode = intent.getByteArrayExtra("barcode");int barocodelen = intent.getIntExtra("length", 0);byte temp = intent.getByteExtra("barcodeType", (byte) 0);barcodeStr = new String(barcode, 0, barocodelen);// 扫描返回数据((EditText) findViewById(R.id.txtScan)).setText(barcodeStr);// 处理扫描到的数据addData(barcodeStr);}};

这就是很简单的一个接收广播数据字段的receiver,只是目前的扫描都是通过代码来调用扫描头,而新机子是直接配置了按键的,和老机子的操作方式不同,Ok,立马改代码,只要把调用扫描头的代码注释掉,然后广播名称等换成新机子的action名称,在OnCreate()中注册广播。
三下五除二,点击运行,手都是颤抖的,跳转页面,扫描都正常了,终于成功啦!好想哭,花了我大概两周时间哪,像一只无头苍蝇到处乱转!

总结

这是我第一次实战去解决一个android的问题,之前只是看了一点书,没有做过相关的实际意义上的开发。过程中心情焦虑,仿徨,因为不知道最后是否真的可以解决,虽然走了很多弯路,最后总算功夫不负有心人吧,下面是对自己的一个总结:
1.遇到问题一定要有自己的主线的判断;
2.当在同一个问题上花了太多时间时,可以去质疑一切,并且大胆去执行,做任何的努力都比自己闭门造车强,特别是要和外界尽量建立多的连接,才能有新的收获;
3.能发现关键问题的人真的很牛逼,希望自己在慢慢积累过程中也能成为一个融会贯通的人。

“XXX停止运行”问题解决相关推荐

  1. *.axf: Error: L6218E: Undefined symbol xxx(xxx.o)问题解决与inline函数的声明

    可能每个人错误原因有所不同吧,我在网上看了很多方法,有些不那么靠谱!! 问题起源: 我在stm32控制LCD时,出现了如下问题 报错提示: 红框中 xxx.o 对应的 xxx.c 文件为报错的文件,绿 ...

  2. 【linux】Could not update ICEauthority file /home/xxx/.ICEauthority问题解决

    1 .解决办法 #以root的用户执行 chown $USER:$USER -R /home/$USER/ chmod 644 /home/$USER/.ICEauthoritysudo chown ...

  3. Android couldn't find xxx.so 问题解决 兼容解决

    动态库位置放置正确,在app/src/main/jniLibs中. 在接入虹软的人脸识别时,引入了一个64bit的包之后,编译安装之后发生了无法找到libarcsoft_face_engine动态库的 ...

  4. Neither BindingResult nor plain target object for bean name 'xxx' availabl问题解决

    明明已经按网上进行处理了为什么还是这个异常呢? 解决方法: 1.<form:form modelAttribute="user" 标签内绑定页面传来的数据. 2.在页面上加上 ...

  5. eslint搭配prettier出现Replace `XXX` with `··········XXX·······`的问题解决方法

    出现原因 因为代码每行的字数过长,而prettier中建议的是80字符换行,跟VS code中的配置冲突导致,每次保存都会闪动一下. 解决办法 打开VS code的设置页面,搜索printWidth, ...

  6. 【Python】PermissionError: [Errno 13] Permission denied: ‘xxx.xlsx‘问题解决

    报错原因:xlsx文件资源被占用,即excel 文件是打开的,写入操作需要关闭文件. 解决办法:关闭excel文件,重新运行.

  7. python pip时遇到ERROR:Cannot unpack file xxx的问题解决方法

    这个问题是因为python的源服务器在国外,下载过慢. 以下载 tensorflow 为例,操作 pip install tensorflow,有可能会出现ERROR:Cannot unpack fi ...

  8. JPA QuerySyntaxException: unexpected token: xxx near问题解决

    问题描述: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: salaryDate near line 1, ...

  9. Java Ambiguous mapping. Cannot map ‘xxx‘ method问题解决

    问题描述: Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'UserController' met ...

最新文章

  1. Genymotion模拟器的安装及常见问题解决方法
  2. 面试官:new一个对象的过程中发生了什么
  3. Linux之ACL权限控制
  4. 公证服务信息_使用多个公证员提高网络吞吐量
  5. hive 十六进制转十进制_hive 常用运算
  6. NOIP引水入城(dfs)
  7. jsp过滤器一点小结
  8. 解决在使用Java API操作HBase中出现的Could not locate executable null\bin\winutils.exe in the Hadoop binaries.错误
  9. 英雄联盟大乱斗一个队出现两个杰斯-多线程死锁
  10. 领跑衫获奖感言 课程总结
  11. 弹簧(压簧)力度计算与设计
  12. 好玩的猜数游戏(不是二分查找!四位数)
  13. 无为而无不为和企业管理
  14. win10忘记密码初始化电脑
  15. 7621:硬币面值组合
  16. python 携程_python-携程爬虫
  17. LaTex(1):使用在线表格生成器工具生成LaTex表格
  18. TIMQQ群发器v1.3.4源码
  19. 华为鸿蒙系统小米,华为鸿蒙之后 小米自家操作系统Vela请战
  20. mini pci-e中包含pcie和usb

热门文章

  1. 计算机用户帐户域怎么查找,win7计算机域怎么查?小编教你查看计算机域、工作机组的方法...
  2. 今天很悲剧,心情很郁闷
  3. fdisk命令 – 磁盘分区
  4. python df 合并_pandas两个df数据如何合并?
  5. 计算机电缆线对成缆系数,电线电缆的成缆系数是什么含义?
  6. Linux下手动查杀木马
  7. mac下如何使用ssh-copy-id完成ssh的公钥认证登录
  8. python 合成gif与拆分gif为png图片
  9. 商业模式新生代_商业模式新生代——商业模式设计
  10. 什么牌子的蓝牙耳机音质好?2022好音质蓝牙耳机推荐