1、都是按下返回鍵触发,调用父类方法会直接关闭调当前activity
2、先后调用顺序onKeyDown>onBackPressed
3、dispatchKeyEvent优先级最高,且上面两个方法不会调用
@Override
public void onBackPressed(){
super.onBackPressed();
Log.i("adam","已退出");
}
//都是按下返回鍵触发,调用父类方法会直接关闭调当前activity
//先后调用顺序onKeyDown>onBackPressed
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Toast.makeText(this, "按下了back键 onKeyDown()", Toast.LENGTH_SHORT).show();
Log.i("adam","onKeyDown已退出");
return super.onKeyDown(keyCode, event);
}else {
Log.i("adam","true");
return false;
}
}
//优先级最高,且上面两个方法不会调用
@Override
public boolean dispatchKeyEvent(KeyEvent keyEvent) {
if (keyEvent.getKeyCode() == 4 && keyEvent.getAction() == 0 && keyEvent.getRepeatCount() == 0) {
Log.i("adam","dispatchKeyEvent已退出");
}
return false;
}
4、新建一个退出对话框
public void adamExit(){
// 仅供参考
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("确认退出游戏吗?").setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "取消退出", Toast.LENGTH_LONG).show();
//关闭对话框
dialog.dismiss();
}
}).setPositiveButton("确认退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//手动杀死进程
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
MainActivity.this.finish();
android.os.Process.killProcess(android.os.Process.myPid());
}
}).show();
}