Android实现双击退出

Android实现双击退出Android实现双击退出需求以及使用场景为了防止用户点击返回键就直接退出APP,通常会加入一个双击退出的要求,如果用户在两秒之内重复点击了返回键,则执行退出操作;如果用户点击了一次返回键之后,超过两秒未再次点击,则不响应退出事件.分析实现这种需求的整体思路就是监测返回键,然后监测是否在指定时间之内再次点击了返回键。方案1.首先监听返回键有三种方式onBackPressed()onKeyDown()onKeyUp()2.其次是判断点击时间的间隔使用Timer()计时器,超出

Android实现双击退出"

Android实现双击退出

需求以及使用场景

为了防止用户点击返回键就直接退出APP,通常会加入一个双击退出的要求
,如果用户在两秒之内重复点击了返回键,则执行退出操作;如果用户点击了一次返回键之后,超过两秒未再次点击,则不响应退出事件.

分析

实现这种需求的整体思路就是监测返回键,然后监测是否在指定时间之内再次点击了返回键。

方案

1.首先监听返回键有三种方式

onBackPressed( )
onKeyDown( )
onKeyUp( )

2.其次是判断点击时间的间隔

使用 Timer()计时器,超出指定时间之后销毁第一次的点击事件
手动记录点击的时间--
 System.currenTimeMillis(),判断两次点击的时间是否超过指定时间

代码

1.方法一

响应Activity的 onKeyUp事件,两次点击时间大于2秒钟就不响应,小于2秒钟就退出程序
    //记录用户首次点击返回键的时间
    private long firstTime = 0;

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
   
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
   
            long secondTime = System.currentTimeMillis();
            if (secondTime - firstTime > 2000) { 
   
                Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                firstTime = secondTime;
                return true;
            } else { 
   
               finish();
            }
        }

        return super.onKeyUp(keyCode, event);
    }

2.方法二

响应onKeyDown事件

    //记录用户首次点击返回键的时间
    private long firstTime = 0;
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
   
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { 
   
            long secondTime = System.currentTimeMillis();
            if (secondTime - firstTime > 2000) { 
   
                Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                firstTime = secondTime;
                return true;
            } else{ 
   
                finish();
            }
        }
        return super.onKeyDown(keyCode, event);
    }
      

3.方法三

直接重写onBackPressed()方法

 /** * 第三种方法 */
    @Override
    public void onBackPressed() { 
   
        long secondTime = System.currentTimeMillis();
        if (secondTime - firstTime > 2000) { 
   
            Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
            firstTime = secondTime;
        } else{ 
   
            finish();
        }
}

4.方法四

通过线程延时的办法实现,借助Timer

/** * 第四种方法 */
    @Override
    public void onBackPressed() { 
   
        if (!mBackKeyPressed) { 
   
            Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
            mBackKeyPressed = true;
            new Timer().schedule(new TimerTask() { 
   
                @Override
                public void run() { 
   
                    mBackKeyPressed = false;
                }
            }, 2000);
        } else { 
   
          finish();
        }
    }

5.方法五

在onKeyUp()方法内使用Timer

  
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
   
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
   
            if (!mBackKeyPressed) { 
   
                Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                mBackKeyPressed = true;
                new Timer().schedule(new TimerTask() { 
   
                    @Override
                    public void run() { 
   
                        mBackKeyPressed = false;
                    }
                }, 2000);
                return true;
            } else { 
   
               finish();
            }
        }
        return super.onKeyUp(keyCode, event);
    }

6.方法六

在onKeyDown()方法内使用Timer


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
   
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { 
   
            if (!mBackKeyPressed) { 
   
                Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                mBackKeyPressed = true;
                new Timer().schedule(new TimerTask() { 
   
                    @Override
                    public void run() { 
   
                        mBackKeyPressed = false;
                    }
                }, 2000);
                return true;
            } else { 
   
                finish();
            }
        }
        return super.onKeyDown(keyCode, event);
    }

6.方法六

使用handler

 //双击退出
    Handler handler = new Handler(){ 
   
        @Override
        public void handleMessage(Message msg){ 
   
            super.handleMessage(msg);
            isExit--;
        }
    };
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event){ 
   
        if(keyCode == KeyEvent.KEYCODE_BACK){ 
   
            isExit++;
            exit();
            return false;
        }
        return super.onKeyDown(keyCode,event);
    }
    //退出
    private void exit(){ 
   
        if(isExit < 2){ 
   
            Toast.makeText(getApplicationContext(),"再按一次退出",Toast.LENGTH_SHORT).show();
            //利用handler延迟发送更改状态信息
            handler.sendEmptyMessageDelayed(0,2000);
        }else{ 
   
            Intent startMain = new Intent(Intent.ACTION_MAIN);
            startMain.addCategory(Intent.CATEGORY_HOME);
            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(startMain);
            System.exit(0);
        }
    }

总结

几种方法看个人喜好以及需求选择

今天的文章Android实现双击退出分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/31107.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注