Android中的“再按一次返回键退出程序”实现

                                         Android中的“再按一次返回键退出程序”实现

                                                                                                                                         2013-06-12        22:40:03

    最近在学习过程中想到了将应用程序与手机按键结合的实现,在网上看了一下,找到了一种——Android中的“再按一次返回键退出程序”实现。感觉不错,还比较有用,所以将这个方法记录了下来。

    代码如下所示:

 1 private long exitTime = 0;   //设置的一个时间初值
 2 
 3 @Override
 4     public boolean onKeyDown(int keyCode, KeyEvent event) {
 5         // TODO Auto-generated method stub
 6         if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
 7             if((System.currentTimeMillis() - exitTime) > 2000){   //currentTimeMillis()---->获得系统当前的时间
 8                 Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
 9                 exitTime = System.currentTimeMillis();          //将系统当前的时间赋值给exitTime
10             }else{
11                 finish();
12                 System.exit(0);
13             }
14             return true;
15         }
16         return super.onKeyDown(keyCode, event);
17     }

    以上代码的实现为,当我们按返回键时会弹出一个Toast,提示”再按一次退出程序“。当用户再按一次返回键,并且两次按键的时间小于2s时退出程序。不过以上方法也存在着局限性,如果我们依次进入多个Activity,按返回键返回上一个Activity时也可能会出现退出的情况。为解决这一问题,可以使用如下方法:

 1 if ((System.currentTimeMillis() - exitTime) > 2000) {
 2             Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
 3             exitTime = System.currentTimeMillis();
 4         } else {
 5             Intent exit = new Intent(Intent.ACTION_MAIN);  //定位到MainActivity
 6             exit.addCategory(Intent.CATEGORY_HOME);
 7             exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 8             startActivity(exit);
 9             System.exit(0);
10         }

 

    注意:在代码中,我们可能会要实现通过点击一个Back键返回上一个activity的情况。如果aaActivity可以跳到bbActivity(有参数传递),ccActivity通过点击Back按钮也可以返回bbActivity(无参数传递),可能存在报空指针异常的情况。此时,只要在AndroidManifest.xml文件中对应的Activity声明中加入单例模式(android:launchMode="singleTask")就可以避免空指针异常

posted @ 2013-06-12 22:42  蠢驴  阅读(275)  评论(0)    收藏  举报