Android 双击 Back 键退出程序
双击退出程序的原理无非就是设置一个退出标识(询问是否退出),如果改变了这个标识(确认退出),则再次点击时立马退出,如果短时间内没有退出,则延时重置这个标识(不退出)。
====================Alarm 机制实现=========================
AlarmActivity.java
public class AlarmActivity extends Activity {
private static boolean quit = false; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} /**
* 重写 Back 键方法
*/
public void onBackPressed() {
if (quit == false) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
alarmAtTime(); //调用计时器
quit = true; //设置退出标识
} else {
super.onBackPressed();
quit = false;
this.finish(); //退出当前Activity
}
} /**
* Alarm 机制计时器
*/
private void alarmAtTime() {
Intent intent = new Intent(this, AlarmReceiver.class); //启动接收器
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0); //设置延迟启动
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
long delay = System.currentTimeMillis() + 2000; //取得当前时间,并延迟2秒
manager.set(AlarmManager.RTC_WAKEUP, delay, pi); //延迟启动广播接收器
} /**
* BroadcastReceiver 广播接收器
*/
public static class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
quit = false; //重置退出标识
}
}
}
AlarmActivity.java
AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".AlarmActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <receiver android:name=".Activity.AlarmActivity$AlarmReceiver"></receiver>
</application>
AndroidManifest.xml
其实 Alarm 机制用于双击退出任务显得有些大材小用了,Java API 里提供的 Timer 类就能很好的完成这个任务。
Alarm 机制适合那些长期在后台运行的定时任务,并且它具有唤醒CPU的功能,即可保证每次需要执行定时任务的时候都能正常工作。
====================Timer 机制实现============================
private boolean quit = false; //设置退出标识 @Override
public void onBackPressed() {
if (quit == false) { //询问退出程序
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
new Timer(true).schedule(new TimerTask() { //启动定时任务
@Override
public void run() {
quit = false; //重置退出标识
}
}, 2000); //2秒后运行run()方法
quit = true;
} else { //确认退出程序
super.onBackPressed();
finish();
}
}
Android 双击 Back 键退出程序的更多相关文章
- android双击返回键退出程序
今天给大家简单说一下,android双击返回键退出程序. @Override public boolean onKeyDown(int keyCode, KeyEvent event) { ...
- android双击返回键退出程序的实现
/** * 菜单.返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-gen ...
- Android应用系列:双击返回键退出程序
前言 有一个很古老的应用技巧,一直被各种大大小小的app用得乐此不疲,那就是双击返回键退出程序.今天就写写它的实现代码,非常简单而且实用. 正文 双击返回键退出程序,一般有两种实现思路,一种是用一个布 ...
- WP8.1应用双击返回键退出程序。
#region 双击退出程序代码 //双击HardwareButtons.BackPressed: //出现退出提示窗口: //“确定”退出,“取消”返回什么也不做: private async vo ...
- Android按返回键退出程序
既然想实现 按两次返回键 退出程序 有两个关键词 一个是 “返回键”,再一个是“退出程序” )先说“退出” 退出相信大家都会 finish(); System.exit(); 为了确保不出现问题,两种 ...
- Android双击Home键返回桌面
转载自:http://blog.csdn.net/dl10210950/article/details/60866407 2中方式,都是监听返回键 一种 1 private long time; /* ...
- Android双击返回按钮退出程序
//双击退出事件 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KE ...
- Android双击返回键退出Activity的两种方法
在开发应用程序的时候,有一种功能是非常常用到的,那就是迅速双击返回按钮,然后实现退出Activity的功能.本人在网上看了很多资料代码,总结起来,主要有两种比较好的方式.一种是开线程延时执行,一种是记 ...
- android 双击返回按钮退出程序。
重写 onKeyDown()方法. @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == K ...
随机推荐
- jdbc java数据库连接 3)Statement接口之执行DDL、DML、DQL
|- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML) |- ResultSet ...
- BZOJ 2115 【Wc2011】 Xor
Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...
- BZOJ 2286 消耗战 (虚树+树形DP)
给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...
- 82 fsck-检查与修复 Linux 档案系统
Linux fsck命令用于 检查与修复 Linux 档案系统,可以同时检查一个或多个 Linux 档案系统. 语法 fsck [-sACVRP] [-t fstype] [--] [fsck-opt ...
- jQuery之Ajax--底层接口
1. $.ajax()方法:是jQuery最底层的Ajax实现.它的结构为:$.ajax(options).该方法只有一个参数,但在这个对象里面包含了$.ajax()方法所需要的请求设置以及回调函数等 ...
- [转]Hibernate延迟加载与opensessioninviewFilter
原文地址:http://blog.csdn.net/a19881029/article/details/7916702 hibernate延迟加载: 一个person对应多个school,使用hibe ...
- layer弹窗监控键盘事件
在开发中我们常常遇到客服各种其他问题,现在客服需要键盘按下关闭当前窗口事件和鼠标点击确定按钮事件一样. 我们需要在layer中编写一个监控事件.具体代码如下 layer.confirm('is not ...
- 【BZOJ-3643】Phi的反函数 数论 + 搜索
3643: Phi的反函数 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 141 Solved: 96[Submit][Status][Discuss ...
- noi-openjudge[4.7搜索]怀表问题
为啥我觉得这是个DP-.f[i][j][k][l]表示四种零件分别用了i,j,k,l个的方案数.然后发现这样不能保证表一定能接在表链首尾,也不知道状态之间如何转移,那么加一维变成f[i][j][k][ ...
- Android Studio使用
HelloWorld在虚拟机上正常运行,在红米1S上很抱歉,HelloWorld已停止运行.有时间解决. 在windows下感觉到Android Studio非常慢,急死人.