一些Android应用退出的时候,要按两次back按键,一直很好奇,总算是发现怎么实现的了。
实现代码:
package com.example.com.cb.test;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 是否退出程序
private static Boolean isExit = false;
// 定时触发器
private static Timer tExit = null;
// 鼠标按键释放
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isExit == false) {
isExit = true;
if (tExit != null) {
tExit.cancel();
}
// 重新实例一个定时器
tExit = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
isExit = false;
}
};
Toast.makeText(this, "在按一次退出程序", Toast.LENGTH_SHORT).show();
// 延时两秒触发task任务
tExit.schedule(task, 2000);
} else {
finish();
System.exit(0);
}
return true;
}
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
实现具体:
看代码很明显就是对Timer这个类的使用.
Timer类说明:
cancel()方法:
schedule:
执行流程:
当你按下back按键后,Toast一下,然后会在当前时间+delay后启动task任务,当启动task任务后,isExit依然是false,是不能退出的,不启动task任务,isExit是true,
在按下一back按键后,由于isExit是true,就执行退出操作.