经常看到很多程序点击一下返回键会显示再按一次退出程,然后连续点击两次返回键就退出程序了。虽然心里对这种功能实现方式有了一种大概想法,但是一直也没有去总结过。现在觉得如果项目中加上这个小功能还是很方便的,所以总结了一下实现方式,下面和大家分享两种方式。
第一种:
首先定义一个boolean型变量用于标示是否退出
boolean isExit;
然后重写Activity中的onKeyDown方法,代码如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
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);
}
return false;
} else {
return super.onKeyDown(keyCode, event);
}
}
再根据onKeyDown用到的消息写一个写一个Handler,代码如下:
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
isExit = false;
}
};
最后再来理一遍基本原理,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次按了BACK键,此时isExit的值已为true,则会执行退出的方法。
第二种:
其实第二种就是把第一种进行了简化,可以用第一种来理解这种方法,用第二种在自己的项目中实现。
直接重写Activity中的onKeyDown方法就可以了,代码如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN)
{
if((System.currentTimeMillis()-exitTime) > 2000) //System.currentTimeMillis()无论何时调用,肯定大于2000
{
Toast.makeText(getApplicationContext(), "再按一次退出程序",Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
}
else
{
finish();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
原理和上面的一样,我就不再重述了,相信大家完全可以看懂。