在使用手机时,我们时常会遇到这样的情况:当我们在使用某个应用程序时,想要退出这个程序,但是按下返回键后又进入了某个界面,再次按下返回键,仍然没有退出。这时候,我们就需要双击返回键才能成功退出这个应用程序。那么,在Android系统下,如何实现这样的双击退出呢?
一、涉及知识点
在开发中,实现双击退出功能无非是两个步骤:判断双击事件与实现退出。那么如何判断双击事件呢?
很多人可能会想到使用Timer或者Handler机制。Timer或Handler机制可以实现“过一段时间后执行某个方法”的效果,这样可以做到保证我们在一定的时间段内执行了某个事件。
但是这种方式并不可靠。在某些情况下,由于手机的运行状态、硬件性能等等因素,Timer或Handler机制所保证的时间可能有所偏差,这样就可能导致判断双击时间的效果出现偏差。因此,在Android系统下,推荐使用系统提供的GestureDetector类来实现双击事件的判断。
GestureDetector是Android系统提供的用于监听手势操作的类,它可以通过监听Touch事件,判断出用户在屏幕上的手势类型。其中,GestureDetector的OnGestureListener接口提供了以下几个方法用以判断双击事件:
1. onDown —— 手指按下屏幕的瞬间执行;
2. onSingleTapUp —— 手指离开屏幕并且没有拖动的瞬间执行;
3. onDoubleTap —— 双击事件;
4. onScroll —— 手指在屏幕上滑动。
进入正题,下面我们将介绍如何使用GestureDetector类来实现Android双击退出应用程序的功能。
二、实现步骤
首先,我们需要在Activity中初始化一个GestureDetector对象,同时实现GestureDetector.OnGestureListener接口,并在onTouchEvent()方法中将触摸事件交给GestureDetector处理。以下为示例代码:
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
private GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
detector = new GestureDetector(this, this);
@Override
public boolean onTouchEvent(MotionEvent event) {
return detector.onTouchEvent(event);
可以看到,我们在MainActivity中实现了GestureDetector.OnGestureListener接口,并在onTouchEvent()方法中将触摸事件交给GestureDetector对象处理。这样,GestureDetector就可以在用户触摸屏幕时监听到用户的操作。
接下来,我们需要实现GestureDetector.OnGestureListener接口中的方法,以判断双击事件是否发生。以下为示例代码:
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
private long lastClickTime = 0;//记录上一次单击的时间
private static final int DOUBLE_CLICK_TIME_DELTA = 300;//双击间隔时间在300毫秒以内才算是双击事件
//onShowPress、onLongPress和onFling方法此处省略
@Override
public boolean onDown(MotionEvent event) {
return false;
@Override
public boolean onSingleTapUp(MotionEvent event) {
if (System.currentTimeMillis() - lastClickTime < DOUBLE_CLICK_TIME_DELTA) {
//双击事件
finish();//退出Activity
} else {
//单击事件
lastClickTime = System.currentTimeMillis();
return true;
@Override
public boolean onDoubleTap(MotionEvent event) {
return false;
@Override
public boolean onDoubleTapEvent(MotionEvent event) {
return false;
@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
return false;
以上代码实现了GestureDetector.OnGestureListener接口中的onSingleTapUp()方法。在这个方法中,我们判断当前时间与上一次单击时间的差值是否小于双击时间间隔,如果是,则表示当前是一个双击事件,我们便调用finish()方法退出Activity。如果不是,则记录当前时间作为上一次单击时间,等待下一次单击事件的发生。
通过以上两个步骤的实现,我们就能实现Android双击退出应用程序的功能了。
三、总结
双击返回键退出应用程序在使用手机时都会遇到的情况,根据 GestureDetecotr 手势识别可以轻松实现双击退出应用的操作,大大方便了用户的操作。总的来说,这种方式比使用 Timer 或 Handler 来实现倒计时等待要可靠得多,使用该方式实现的效果更好,而且还省去了计时器的开销,同时代码量也更加简洁易懂。
因此,这种方式是Android开发中常见的任务,还请广大开发者好好掌握。