android 再按一次后退键退出应用程序

  //退出标记
        private static Boolean isExit = false;
        Timer tExit = new Timer();
        TimerTask task = new TimerTask() {
                @Override
                public void run() {
                        isExit = false;
                }
        };

        //重写按下“后退”键时所做的操作
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
                System.out.println("TabHost_Index.java onKeyDown");
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                        if (isExit == false) {
                                isExit = true;
                                Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT).show();
                                // 定义计划任务,根据参数的不同可以完成以下种类的工作:
                                // 在固定时间执行某任务,在固定时间开始重复执行某任务,重复时间间隔可控,在延迟多久后执行某任务,在延迟多久后重复执行某任务,重复时间间隔可控
                                task = null;
                                task = new TimerTask(){
                                        @Override
                                        public void run() {
                                                isExit = false;
                                        } 
                                };
                                tExit.schedule(task, 2000);
                        } else {
                                finish();
                                System.exit(0);
                        }
                }
                return true;
        }

解释:
1.tExit.schedule(task, 2000); 这是说:2秒后,执行这个TimerTask,不过只执行一次。
2.task = null; 设置为null,因为如果不设置为null,直接调用 tExit.schedule(task, 2000);会抛出异常:java.lang.IllegalStateException: TimerTask is scheduled already。

*************************************************************************************************************

public class BackActivity extends Activity {
 
        private static final String TAG = "BackActivity";
         private long mLastBackTime = 0;
         private long TIME_DIFF = 2 * 1000;
 
        @Override
         public void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.main);
         }
 
        @Override
         public boolean onKeyDown(int keyCode, KeyEvent event) {
                 if (keyCode == KeyEvent.KEYCODE_BACK) {
                         long now = new Date().getTime();
                         if (now - mLastBackTime < TIME_DIFF) {
                                 Log.d(TAG, "back, finish");
                                 return super.onKeyDown(keyCode, event);
                         } else {
                                 Log.d(TAG, "after 2s, toast");
                                 mLastBackTime = now;
                                 Toast.makeText(this, "再点一次将推出", 2000).show();
                         }
                         return true;
                 }
                 return super.onKeyDown(keyCode, event);
         }
 }

*************************************************************************************************************

先在Activity中定义一个成员变量
 
    private long firstBackKeyDown;
 


        @Override     //重写键盘按键分发事件,因为我是在TabActivity中写的Demo。如果是Acitivity中则直接重写OnKeyDown即可,具体区别请Google...
         public boolean dispatchKeyEvent(KeyEvent event) {
                 if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_BACK){
                         return exitApplication();
                 }
                 return super.dispatchKeyEvent(event);
         }
 
        private boolean exitApplication() {
                 if(firstBackKeyDown == 0 ? true : false){
                         firstBackKeyDown = System.currentTimeMillis();
                         Toast.makeText(mContext, "2秒内再次点击可退出~", Toast.LENGTH_SHORT).show();
                         return true;
                 }else{
                         if(System.currentTimeMillis() - firstBackKeyDown <= 2000 ? true : false){
                                 mActivity.finish();
                                 return true;
                         }else{
                                 firstBackKeyDown = 0;
                                 exitApplication();
                                 return true;
                         }
                 }
         }
 

 

 

 

posted @ 2013-05-15 20:15  坏混混  阅读(138)  评论(0)    收藏  举报