private static Boolean isExit = false;
private static Boolean hasTask = false;
Timer tExit = new Timer(); TimerTask task = new TimerTask() {
@Override
public void run() {
isExit = false;
hasTask = true;
System.out.println(""+isExit);
}
}; public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isExit == false) {
isExit = true;
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
if (!hasTask) {
//hasTask=false;
tExit.schedule(task, 2000);
}
} else {
finish();
System.exit(0);
}
}
return false;
}这个程序是刚刚小弟从网上看的,但是敲完之后测试发现,第一次测试,点击返回键,等一会再点击,没有退出,程序不关闭,再次测试,无论等多久,第二次点击返回键都没退出,发现,第二次并没有进入到线程的那个方法中去,求大神赐教

解决方案 »

  1.   


        private Exit exit = new Exit();      ...... @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK){
    pressAgainExit();
    return true;
    }
    return super.onKeyDown(keyCode, event);
    }        ...... private void pressAgainExit() {
    if (exit.isExit()) {
    counterService.stopCounter();
    MainActivity.this.finish();
    View v = new View(null);
    v.clearFocus();
    } else {
    Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_LONG).show();
    exit.doExitInOneSecond();
    }
    }
    Exit.java 如下package jim.zhang.broadcast.util;import android.os.Handler;
    import android.os.HandlerThread;
    import android.widget.Toast;public class Exit {
    private boolean isExit = false;
    private Runnable task = new Runnable() {
    @Override
    public void run() {
    isExit = false;
    }
    }; public void doExitInOneSecond() {
    isExit = true;
    HandlerThread thread = new HandlerThread("doTask");
    thread.start();
    new Handler(thread.getLooper()).postDelayed(task, 4000);
    } public boolean isExit() {
    return isExit;
    } public void setExit(boolean isExit) {
    Toast.makeText(null, "再按一次退出程序", Toast.LENGTH_SHORT).show();    
    this.isExit = isExit;
    }
    }