转载自:http://xfenglin.com/a/12007044545.html
在做安卓应用是我们经常要判断用户对返回键的操作,一般为了防止误操作都是在用户连续按下两次返回键的时候提示用户是否退出应用程序。
第一种实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。
在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此时isExit的值已为true,则会执行退出的方法。
public class MainActivity extends AppCompatActivity {
//定义一个变量来标识是否退出
private static boolean isExit = false;
private Button jump;
private static Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
isExit = true;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
jump = (Button) findViewById(R.id.jump);
jump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
exit();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void exit() {
if (!isExit){
isExit = true;
Toast.makeText(MainActivity.this,"再按一次退出程序",Toast.LENGTH_SHORT).show();
mHandler.sendEmptyMessageDelayed(0,1000);
}else {
Log.e("bai","成功退出");
this.finish();
System.exit(0);
}
}
}
第二种方法
通过记录用户点击的时间,比较时间差来判断是否需要退出。
public class MainActivity extends AppCompatActivity {
private long clickTime = 0; //记录第一次点击的时间
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
exit();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void exit() {
if (System.currentTimeMillis() - clickTime >2000){
Toast.makeText(MainActivity.this,"再按一次退出程序",Toast.LENGTH_SHORT).show();
clickTime = System.currentTimeMillis();
}else {
this.finish();
System.exit(0);
}
}
}