"在Android应用开发中,通常为了提供用户友好的体验,会设置一个功能,即连续点击两次返回键退出程序。这个功能可以防止用户意外地退出应用,同时在第二次点击时给予明确的提示。以下代码展示了如何实现这一功能。" 在Android系统中,当用户按下设备的返回键时,系统会调用Activity的`onKeyDown`方法。在给出的代码片段中,我们看到开发者重写了这个方法来处理返回键事件。首先,定义了一个布尔变量`isExit`,用于判断用户是否已经点击过一次返回键。 ```java boolean isExit; ``` 然后,在`onKeyDown`方法内,当检测到按键码`KeyEvent.KEYCODE_BACK`(代表返回键)被按下时,调用`exit()`方法,并返回`false`,这样可以阻止系统的默认行为,即立即退出当前Activity。 ```java public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit(); return false; } else { return super.onKeyDown(keyCode, event); } } ``` `exit()`方法是实现双击退出的核心。第一次点击返回键时,`isExit`被设为`true`,并显示一个Toast提示用户"再按一次退出程序",同时通过`Handler`发送一个延迟2秒的消息。如果在这2秒内再次按下返回键,`exit()`方法会被再次调用。 ```java private void exit() { if (!isExit) { isExit = true; Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); mHandler.sendEmptyMessageDelayed(0, 2000); } else { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); System.exit(0); } } ``` 这里的`mHandler`是一个`Handler`对象,用于接收并处理消息。当2秒的延迟时间过后,`handleMessage`方法会被调用,将`isExit`重置为`false`,清空之前的状态。 ```java Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); isExit = false; } }; ``` 这个实现方式确保了用户在短时间内连续两次按下返回键后,应用才会真正退出。这既给了用户确认退出的机会,也避免了误操作导致的突然退出。这种做法在许多Android应用中被广泛采用,以提高用户体验。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
exit();
return false;
} else {
return super.onKeyDown(keyCode, event);
}
}
private void exit() {
// TODO Auto-generated method stub
if (!isExit) {
isExit = true;
Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
mHandler.sendEmptyMessageDelayed(0, 2000);
} else {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
System.exit(0);
}
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦