您的位置:首页 > 移动开发 > Android开发

Android中连续点击两次BACK键退出程序

2015-12-21 22:57 477 查看
在Android开发中,我们正常退出程序时,经常会设置这样一个小特色,就是短时间内连续按下两次BACK键才会将程序退出,对于这种设置,我们通常会使用两种方式来解决。

一、通过记录两次按下BACK键的时间差来判断

这种方式也比较好理解一点,我们可以设置一个第一次点击的时间变量和第二次点击的时间变量,通过两次点击的时间差是否在一个规定的时间段内即可,例如,当第二次按下时与第一次按下时的时间差在两秒以内,就会退出程序,否则,不退出,具体实现以代码为例,逻辑很简单,就不多说了:

public class MainActivity extends AppCompatActivity {

/**
* 设置第一次点击的时间
*/
private long firstTime = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 判断,如果点击时间为按下BACK键
if(keyCode == KeyEvent.KEYCODE_BACK) {
long secondTime = System.currentTimeMillis() ;
if(secondTime - firstTime > 2000) {
Log.d("","间隔大于2s") ;
// 当两次按键时间间隔大于2s时
Toast.makeText(this,"再按一次退出",Toast.LENGTH_LONG).show() ;
firstTime = secondTime ;
return true ;
} else {
// 两次按键时间间隔小于2s,退出程序
Log.d("","间隔小于2s") ;
System.exit(0) ;
}
}
return super.onKeyDown(keyCode, event);
}

}


二、开启线程进行延时处理

我们还可以这样做,首先设置一个全局变量来判断是否需要退出,当我们第一次按下BACK键时,设置全局变量为退出标识符,同时开启一个线程,延迟一个时间段(例如延迟2s),如果在线程执行完之前,又再次按下了BACK键,就会执行退出操作,但是,若线程执行完了依旧没有再次按下(也就是说在规定时间段内没有按下两次BACK键),则将全局变量设置为不退出标识符,其实逻辑也比较简单,代码如下:

public class MainActivity extends AppCompatActivity {

/**
* 设置一个全局变量来控制是否退出
*/
private boolean isExit = false ;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}

@Override
public void onBackPressed() {

if(isExit == false) {
// 当第一次按下BACK键时,提示,并将isExit设置为true
Toast.makeText(this,"再按一次退出",Toast.LENGTH_LONG).show() ;
isExit = true ;
new Thread() {

@Override
public void run() {
try {
// 延迟2s
Thread.sleep(2000) ;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 如果2s内没有再次按下BACK键,则isExit设置为false
isExit = false ;
}
}
}.start() ;
return ;
} else {
// 如果在线程执行完之前(即2s内)再次按下BACK键,则退出当前程序
Main2Activity.this.finish() ;
}
super.onBackPressed();
}

}


以上两种方式的执行效果是一样的,具体你喜欢哪种方式就是仁者见仁,智者见智了。

PS:onBackPressed()的使用

在这里我稍微解释一下这个onBackPressed()方法,我们在Android中,接受按下BACK键时,可以通过onKeyUP(int keyCode, KeyEvent event)或者onKeyDown(int keyCode, KeyEvent event)这两个方法,通过判断KeyEvent的值是否为KEYCODE_BACK,得知是否为按下BACK键,但是在Android 2.0之后,又更新了一个方法,那就是onBackPressed(),我们可以直接在Activity中重写onBackPressed()方法,从而直接在Activity中直接判断按下BACK键,不过这个方法只适用于2.0以后的版本。

@Override
public void onBackPressed() {

// 这里处理逻辑代码,大家注意:该方法仅适用于2.0或更新版的sdk
return;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: