今天调了一个非常蛋疼的bug,花了差不多一个小时的时间,在应用内的某个activity中不能使用设备的音量调节按钮调节音量,开始以为是因为window的某些flag导致的,试了试,貌似没有影响,后来又查manifest,也没有什么问题,最后还是定位到activity的代码上。读了半天代码没发现有哪异样的地方,只能苦比地一点一点删,看删了哪些部分以后会有影响,最后终于发现是override onKeyDown方法的时候的问题.@Override

publicbooleanonKeyDown(intkeyCode,KeyEventevent){

if(keyCode==KeyEvent.KEYCODE_BACK){

close();

}

returntrue;

}

本来是想用户按了返回键以后,执行关闭操作。但是在最后很随意地返回了一个true,最终导致这一个多小时的悲剧。先看看onKeyDown对return值的说明。

public boolean onKeyDown (int keyCode, KeyEvent event)

Returns

Return true to prevent this event from being propagated further, or false to indicate that you have not handled this event and it should continue to be propagated.

返回true表示你已经处理了,就不会在onKeyDown的事件中继续传递,所以相当于在当前activity中,所有的keyevent都被拦截了,但是对于close()的响应是正确的,所以当时在写代码的时候就没有注意这个引入的bug,因为close()工作正常!

修正后的代码:@Override

publicbooleanonKeyDown(intkeyCode,KeyEventevent){

if(keyCode==KeyEvent.KEYCODE_BACK){

close();

returntrue;

}

returnsuper.onKeyDown(keyCode,event);

}

这里最后是返回 false 还是 super.onKeyDown(keyCode, event)。我觉得还是super方法比较好,因为父类还有很多对keydown事件的处理,置于要不要返回 true,就得具体情况具体分析了。

在Android当中,经常会用到这样的设计。尤其是很多返回 boolean 值的方法,比如 onTouch , dispatchTouchEvent 。在我们继承系统组件的时候,经常会遇到这种情形,所以一定要认真看返回值的意义,在相应的时候返回正确的返回值,不然会引入一些很难察觉的bug,让程序出现一些很奇怪的现象。浪费青春阿!

android onkeydown继承,onKeyDown方法中的返回值相关推荐

  1. spring aop如何在切面类中获取切入点相关方法的参数、方法名、返回值、异常等信息

    aop思想可以很好的帮助我们实现代码的解耦,比如我们之前提到的,将日志代码与业务层代码完全独立,通过spring aop的代理类进行整合.在切面类中,我们也能够通过spring提供的接口,很好的获取原 ...

  2. java方法带参数返回值_Java方法中的参数太多,第6部分:方法返回

    java方法带参数返回值 在当前的系列文章中,我正在致力于减少调用Java方法和构造函数所需的参数数量,到目前为止,我一直专注于直接影响参数本身的方法( 自定义类型 , 参数对象 , 构建器模式 , ...

  3. 获取键盘录入的5个int数,并存放到int数组arr中,输入前提示输入的是第几个值 * * 2.2 传递数组arr调用getNum(int[] arr)方法,获取返回值,并打印输出

    package Day05;import java.util.Scanner;/*** 2.定义main方法:* * 2.1 获取键盘录入的5个int数,并存放到int数组arr中,输入前提示输入的是 ...

  4. Java中带返回值的方法的定义与调用

    带返回值的方法定义: public static 数据类型 方法名(参数){return 数据;} 与前文中带返回值的方法定义不同的是,void变成了数据类型,对应return后紧跟的数据.这里顺便说 ...

  5. Vue获取methods中方法的return返回值

    Vue获取methods中方法的return返回值 1. 遇到的需求 需要调用methods中的一个方法直接使用return返回值: 但直接使用return关键字是undefined,无法直接拿到返回 ...

  6. python类继承返回值_python继承threading.Thread实现有返回值的子类实例

    继承与threading.thread实现有返回值的子类mythread,废话不多说,大家直接看代码 import threading class mythread(threading.thread) ...

  7. 获取存储过程返回值及代码中获取返回值

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  8. 测试私有方法_Java基础之抽象类、接口作为方法参数和返回值

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  9. c# mysql executenonquery_C#中ExecuteNonQuery()返回值注意点分析

    本文实例讲述了C#中ExecuteNonQuery()返回值注意点.对于C#数据库程序设计有一定的借鉴价值.分享给大家供大家参考之用.具体分析如下: 首先,在查询某个表中是否有数据的时候,我们通常用E ...

最新文章

  1. php aapt apk 包名,aapt 命令可应用于查看apk包名、主activity、版本等很多信息
  2. 高级计算机网络的基本知识
  3. CF1286D-LCC【动态dp,数学期望】
  4. Nuc972使用NandFlash时,uboot所需要的改动
  5. 使用telephonymanager真机调试 闪退_watchOS 上的一次 SKView 内存泄露调试
  6. python优先队列的库,python优先队列及二叉堆的实现
  7. mysql connector开源协议_Spring Boot 集成 MariaDB Connector/J 连接 MySQL
  8. 房贷提前还款怎么还?
  9. 对Go 1.16 io/fs设计的第一感觉:得劲儿!
  10. 计算机录屏幕和声音的软件是什么,电脑录屏软件带声音哪个好用 电脑录屏软件带声音软件...
  11. 用 Python 计算综合测评中的专业成绩加权平均分
  12. 转:企业数字化的本质,其实就这3条
  13. RDS经典网络平滑迁移到VPC的混访方案
  14. mac pro M1(ARM)安装:centos8.0虚拟机
  15. Kruskal算法(克鲁斯卡尔)最小生成树
  16. 使用Famo.us 创建高性能移动 UI
  17. 主流Wifi芯片简要介绍
  18. 2008 NBA 全明星周未之扣篮大赛
  19. 国内最全的Android市场,最全Android软件商店
  20. 计算机图灵,什么叫做图灵计算机?

热门文章

  1. 去掉桌面快捷方式箭头和快捷方式字样--美化桌面快捷方式
  2. 去除快捷方式箭头BAT脚本
  3. 算法分析与设计实践-作业七-投资问题
  4. Python convert函数-转换图像的格式
  5. lenovo k1 android 4,阳光明媚-联想乐PAD K1获取ROOT及升级Android 4.0.4
  6. HC-05蓝牙模块与电脑通信
  7. JetBrains IDEA/Clion/Client + ROS 远程开发环境搭建
  8. 张一鸣,那些跳不动的「弃子」
  9. PyCharm中Debug模式进行调试详解
  10. ❤️创意网页:能量棒页面 - 可爱版(加载进度条)