activity 的返回按钮

http://www.2cto.com/kf/201210/160251.html

连续点击两次程序就退出程序,这是一个很有趣的程序功能,下来介绍一下我的实现方式(欢迎大家拍砖指点):
   1、在Activity中设置一个long型的全局变量 firstTime=0,用来记录第一次按下的时间(单位为毫秒);
   2、响应Activity的 onKeyUp事件:
     
@Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
        if (keyCode == KeyEvent.KEYCODE_BACK) { 
            long secondTime = System.currentTimeMillis(); 
            if (secondTime - firstTime > 800) {//如果两次按键时间间隔大于800毫秒,则不退出 
                Toast.makeText(MainActivity.this, "再按一次退出程序...", 
                        Toast.LENGTH_SHORT).show(); 
                firstTime = secondTime;//更新firstTime 
                return true; 
            } else { 
                System.exit(0);//否则退出程序 
            } 
        } 
        return super.onKeyUp(keyCode, event); 
    } 
 OK了!

http://www.2cto.com/kf/201103/84900.html

在开发android应用时,常常通过按返回键(即keyCode == KeyEvent.KEYCODE_BACK )就能关闭程序,其实大多情况下该应用还在任务里运行着,其实这不是我们想要的结果。

我们可以这样做,当用户点击自定义的退出按钮或返回键时(需要捕获动作),我们在onDestroy() 里强制退出应用,或直接杀死进程,具体操作代码如下:

//捕获按下键盘上返回按钮
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            new AlertDialog.Builder(this)
                    // .setIcon(R.drawable.services)
                    .setTitle(R.string.prompt)
                    .setMessage(R.string.quit_msg)
                    .setNegativeButton(R.string.cancel,
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                }
                            })
                    .setPositiveButton(R.string.confirm,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int whichButton) {
                                    finish();
                                }
                            }).show();
            return true;
        } else {
            return super.onKeyDown(keyCode, event);
        }
    }
    //彻底退出程序
    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.exit(0);
        // 或者下面这种方式
        // android.os.Process.killProcess(android.os.Process.myPid());
    }

http://blog.csdn.net/carterjin/article/details/7677069

正好在网上看到了一个,研究了一下,保存下来吧。

第一步,定义一个变量,用于标识是否退出

[java] view plaincopy
 
  1. boolean isExit;  

第二步,重写Activity中onKeyDown方法

[java] view plaincopy
 
  1. @Override  
  2.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  3.         if (keyCode == KeyEvent.KEYCODE_BACK) {  
  4.             exit();  
  5.             return false;  
  6.         } else {  
  7.             return super.onKeyDown(keyCode, event);  
  8.         }  
  9.     }  


第三步,写一个退出方法,名称就是onKeyDown中的exit()

[java] view plaincopy
 
  1. public void exit(){  
  2.         if (!isExit) {  
  3.             isExit = true;  
  4.             Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();  
  5.             mHandler.sendEmptyMessageDelayed(02000);  
  6.         } else {  
  7.             Intent intent = new Intent(Intent.ACTION_MAIN);  
  8.             intent.addCategory(Intent.CATEGORY_HOME);  
  9.             startActivity(intent);  
  10.             System.exit(0);  
  11.         }  
  12.     }  


第四步,根据exit()方法中的的消息,写一个Handler

[java] view plaincopy
 
  1. Handler mHandler = new Handler() {  
  2.   
  3.         @Override  
  4.         public void handleMessage(Message msg) {  
  5.             // TODO Auto-generated method stub  
  6.             super.handleMessage(msg);  
  7.             isExit = false;  
  8.         }  
  9.   
  10.     };  



实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。

在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在Handler中将此值还原成false。

如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此时isExit的值已为true,则会执行退出的方法。

原文地址:https://www.cnblogs.com/daishuguang/p/3710617.html