最近发现了谷歌安卓源生的一个bug,在这里记录一下。

操作步骤:

1、进入拨号界面,输入 *#*#4636#*#* ,然后会进入手机测试界面。
2、点击第三栏 Wi-Fi information 。
3、进入Wi-Fi information 界面后,点击第一栏 Wi-Fi API 。
4、进入Wi-Fi API 界面后,点击 enableNetwork 。这时会弹出一个输入栏,如果你输入为空或者输入为非数字,如何点击 OK ,连续操作俩次,就会显示 Settings keeps stopping。

分析:

从log中可以看到,有地方抛出了异常,追踪代码,发现异常为 java.lang.NumberFormatException 。
并且从log中也可以看出是 WifiAPITest 里出现了问题。另外从现象来看,导致 crash 的操作也是在WifiAPITest 中,那我们看代码。
从代码中可以看到,从 EditText 中输入内容后,要调用 Integer.parseInt() 来把string类型转换为int类型。因为enableNetwork 的参数是网络的ID,是数字。
packages/apps/Settings/src/com/android/settings/wifi/WifiAPITest.java
代码链接

public boolean onPreferenceClick(Preference pref) {.......} else if (pref == mWifiEnableNetwork) {AlertDialog.Builder alert = new AlertDialog.Builder(getContext());alert.setTitle("Input");alert.setMessage("Enter Network ID");// Set an EditText view to get user inputfinal EditText input = new EditText(getPrefContext());alert.setView(input);alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {Editable value = input.getText();netid =  Integer.parseInt(value.toString());mWifiManager.enableNetwork(netid, false);}});alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {// Canceled.}});alert.show();}

/libcore/ojluni/src/main/java/java/lang/Integer.java
看 parseInt 函数,可以看到当数据不符合规范时会抛出异常,比如你输入的是汉字或者十进制的字母,都是无法转换为 int 类型的,所以就会抛出异常。而对于这个异常,Integer 中并没有捕获,所以异常会抛给上层,也就是我们上面看的 WifiAPITest ,很明显 WifiAPITest 也没有处理这个异常。Java中如果异常没有处理,也没有 try catch捕获,会导致程序停止执行的。 所以当我们输入为空或者输入非数字,Settings 就会 crash 。
代码链接

public static int parseInt(String s, int radix)throws NumberFormatException
{...........if (len > 0) {char firstChar = s.charAt(0);if (firstChar < '0') { // Possible leading "+" or "-"if (firstChar == '-') {negative = true;limit = Integer.MIN_VALUE;} else if (firstChar != '+')throw NumberFormatException.forInputString(s);if (len == 1) // Cannot have lone "+" or "-"throw NumberFormatException.forInputString(s);i++;}multmin = limit / radix;while (i < len) {// Accumulating negatively avoids surprises near MAX_VALUEdigit = Character.digit(s.charAt(i++),radix);if (digit < 0) {throw NumberFormatException.forInputString(s);}if (result < multmin) {throw NumberFormatException.forInputString(s);}result *= radix;if (result < limit + digit) {throw NumberFormatException.forInputString(s);}result -= digit;}} else {throw NumberFormatException.forInputString(s);}return negative ? result : -result;
}

解决:

谷歌的 pixel 源生机也存在这个问题,但是我用的这个小米手机没有这个问题。其实这个问题不难解决,在调用 Integer.parseInt 的地方,加一个 try catch 语句,将这个异常进行捕获就好了。

关注公众号,获取更多开发必备知识

谷歌源生bug发现与解决记录相关推荐

  1. ie6,ie7,ie8 css bug兼容解决记录

    断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决 ,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1 ...

  2. 【Unity3D日常BUG记录】Unity打包运行出现:PlatformNotSupportedException该平台不支持此操作的解决记录

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  3. ie6,ie7,ie8,ie9 css bug兼容解决记录

    select {background-color:red\0; /* ie 8/9*/background-color:blue\9\0; /* ie 9*/*background-color:#dd ...

  4. ORA-29913,ORA-29400,KUP-00554,KUP-01005,KUP-01007 oracle外部表报错解决记录

    @ORA-29913,ORA-29400,KUP-00554,KUP-01005,KUP-01007 oracle外部表报错解决记录TOC 今天新建完oracle外部表,看了语法没错误,看了数据文件和 ...

  5. Apache httpd 几个报错的解决记录

    文章目录 Apache httpd 几个报错的解决记录 一 背景 二 解决步骤 2.1 查资料 2.2 手动变更配置,寻找突破口 Apache httpd 几个报错的解决记录 一 背景 今天在测试环境 ...

  6. 以太网已连接却无法联网的解决记录

    以太网已连接却无法联网的解决记录 问题描述 解决过程 问题描述 由于更新了Win10,突然发现上不了网了,已排除网线.路由器等问题. 1.右下角的网络连接是小地球图标,点击显示以太网已连接,但是连不了 ...

  7. 服务器被攻击的发现和解决过程

    记一次服务器被攻击的发现和解决过程 这是之前2018年左右,买阿里云服务器之后,服务器被攻击,当时的记录信息,现在整理一下 出现的问题 解决思路和解决过程 解决思路: 解决步骤: 思考:为什么会出现这 ...

  8. 发现无法解决的相同从属程序集的不同版本之间的冲突

    本文翻译自:Found conflicts between different versions of the same dependent assembly that could not be re ...

  9. web3.js使用bug汇总及解决方法

    web3.js使用过程中各类bug汇总:More than one instance of bitcore-lib found;BigNumber Error;gasLimit无法解析而报错;js合约 ...

最新文章

  1. Django生命周期
  2. Winform中连接Mysql8并查询表中数据进行显示
  3. esp8266 micropython oled_micropython(4):使用ESP8266 控制 oled 屏幕,并显示 helloworld 字符...
  4. 支付宝集成——如何在回调地址中使用自定义参数
  5. side-by-side
  6. 关于openstack,cloudstack,Eucalyptus对比分析
  7. 配置标准IP ACL实验
  8. scrapy爬取时出现错误:Forbidden by robots.txt: <GET https://www.xinpianchang.com/channel/index/sor
  9. 告别2018:人间值得,你更值得!
  10. 面向金融的R语言_L3
  11. 关于华硕主板的图像输出设置
  12. oracle语句怎么查工作日,SQL查询工作日 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区...
  13. 强势来袭!国内首本大型分布式架构笔记浴火新生
  14. matlab空间曲面拟合,【Matlab】离散点拟合曲面
  15. python常遇错误-IndexError: list index out of range
  16. 助创cms众筹 php,助创cms汽车众筹系统:仿车车车汽车众筹源码程序
  17. javascript练习题三
  18. C语言—输出菱形(一次循环嵌套实现)
  19. ❤️保姆级!超详解!远程连接Linux虚拟机!❤️
  20. android中的横竖屏切换,Android中横竖屏切换时Activity的生命周期

热门文章

  1. 【IoT】基于NB-IoT的LWM2M协议浅析
  2. (转)2010年最不能错过的101个网站
  3. 计算机主机内部的除尘课件,怎么给电脑主机机箱内部除尘
  4. 计算机桌面图片唐诗,自动唐诗宋词桌面壁纸
  5. Windows下使用cmake vscode搭建 C/C++开发调试环境
  6. SIGPIPE信号详解
  7. K8S的 CNI 详细原理以及解释
  8. 免费分享一个SpringBoot鲜花商城管理系统,很漂亮的
  9. Docker技术研究
  10. php购物车登录用cookie,php利用cookies实现购物车的方法_PHP