Android中连续点击两次BACK键退出程序
2015-12-21 22:57
477 查看
在Android开发中,我们正常退出程序时,经常会设置这样一个小特色,就是短时间内连续按下两次BACK键才会将程序退出,对于这种设置,我们通常会使用两种方式来解决。
一、通过记录两次按下BACK键的时间差来判断
这种方式也比较好理解一点,我们可以设置一个第一次点击的时间变量和第二次点击的时间变量,通过两次点击的时间差是否在一个规定的时间段内即可,例如,当第二次按下时与第一次按下时的时间差在两秒以内,就会退出程序,否则,不退出,具体实现以代码为例,逻辑很简单,就不多说了:
二、开启线程进行延时处理
我们还可以这样做,首先设置一个全局变量来判断是否需要退出,当我们第一次按下BACK键时,设置全局变量为退出标识符,同时开启一个线程,延迟一个时间段(例如延迟2s),如果在线程执行完之前,又再次按下了BACK键,就会执行退出操作,但是,若线程执行完了依旧没有再次按下(也就是说在规定时间段内没有按下两次BACK键),则将全局变量设置为不退出标识符,其实逻辑也比较简单,代码如下:
以上两种方式的执行效果是一样的,具体你喜欢哪种方式就是仁者见仁,智者见智了。
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以后的版本。
一、通过记录两次按下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; }
相关文章推荐
- Ubuntu下为AndroidStudio编译并使用FFmpeg(三)源码分析
- android-USB Host
- Ubuntu下为AndroidStudio编译并使用FFmpeg(二)AndroidStudio部分
- Ubuntu下为AndroidStudio编译并使用FFmpeg(一)ndk部分
- 【Android 非常基础】PopupWindow showAtLocation和showAsDropDown参数分析
- Android Volley异步加载图片+缓存策略
- android-Activity读书笔记
- 【Android测试】【第一节】性能——CPU
- android之旅1:background && hello world
- 解决android sdk 无法更新
- Android中killProcess()、System.exit(0)及finish()的区别
- android开发步步为营之89:ListView和GridView动态加载图片,保证不导致OOM
- android shape的使用
- Mars 老师 Android 教程之 Activity 生命周期学习笔记
- 在android studio中导入开源库PullToRefresh
- Android内存泄露
- android实现课程表界面
- 给 Android 开发者的 RxJava 详解
- Mars Android 视频教程之 Activity 生命周期学习笔记
- 通过Wifi调试运行Android应用的IntelliJ/AndroidStudio插件:AndroidWiFiADB