应用中经常会用到双击返回键在退出应用的效果,目的是为了防止用户误触返回键而导致退出应用。 通常的写法如下: 首先定义一个变量
/**
* 再次返回键退出程序
*/
private long lastBack = 0;
然后我们重写onBackPressed
@Override
public void onBackPressed() {
if (lastBack == 0 || System.currentTimeMillis() - lastBack > 2000) {
Toast.makeText(getApplicationContext(), "再按一次返回退出程序", Toast.LENGTH_SHORT).show();
lastBack = System.currentTimeMillis();
return;
}
super.onBackPressed();
}
首先我们获取当前的变量lastBack,然后给它赋值,然后检测是否大于两秒,如果大于则弹出提示“再按一次的返回退出程序”,当两次间隔小于两秒那么就会走super
onBackPressed()在Activity.class里实现:
public void onBackPressed() {
finish();
}
super.onBackPressed()是执行系统的默认动作,就是退出当前activity,所以这样就实现了退出应用的功能。 但是有些时候不执行onBackPressed(),那怎么解决呢
我采用的是重写dispatchKeyEvent代码如下:
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction()==KeyEvent.ACTION_DOWN){
//自己的操作
if (lastBack == 0 || System.currentTimeMillis() - lastBack > 2000) {
Toast.makeText(getApplicationContext(), "再按一次返回退出程序", Toast.LENGTH_SHORT).show();
lastBack = System.currentTimeMillis();
}else {
finish();
}
return false;
}
return super.dispatchKeyEvent(event);
}
采用此方法,解决了不响应onBackPressed的问题,至于原因可能是因为dispatchKeyEvent只是监控案件不管是activity还是activitygroup都会触发而onBackPressed是在activity才触发。