public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// 确认对话框
final AlertDialog isExit = new AlertDialog.Builder(this).create();
// 对话框标题
isExit.setTitle("系统提示");
// 对话框消息
isExit.setMessage("确定要退出吗?");
// 实例化对话框上的按钮点击事件监听
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case AlertDialog.BUTTON1:// "确认"按钮退出程序

NotificationManager notificationManager = (NotificationManager) MainActivity.this
.getSystemService(NOTIFICATION_SERVICE);
notificationManager.cancel(0);
String packagename = getPackageName();
ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
finish();
if(getSystemVersion()<8){

manager.restartPackage(getPackageName());
}else{

manager.killBackgroundProcesses(packagename);
}

break;
case AlertDialog.BUTTON2:// "取消"第二个按钮取消对话框
isExit.cancel();
break;
default:
break;
}
}
};
// 注册监听
isExit.setButton("确定", listener);
isExit.setButton2("取消", listener);
// 显示对话框
isExit.show();
return false;
}
return false;

}


finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理;当调用System.exit(0)时,杀死了整个进程,

这时候活动所占的资源也会被释放。

在开发android应用时,常常通过按返回键(即keyCode ==KeyEvent.KEYCODE_BACK)就能关闭程序,其实大多情况下该应用还在任务里运行着,其实这不是我们想要的结果。

我们可以这样做,当用户点击自定义的退出按钮或返回键时(需要捕获动作),我们在onDestroy()里强制退出应用,或直接杀死进程。

[java] view plain copy
  1. @Override
  2. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  3. //按下键盘上返回按钮
  4. if(keyCode==KeyEvent.KEYCODE_BACK){
  5. newAlertDialog.Builder(this)
  6. .setIcon(R.drawable.services)
  7. .setTitle(R.string.prompt)
  8. .setMessage(R.string.quit_desc)
  9. .setNegativeButton(R.string.cancel,newDialogInterface.OnClickListener(){
  10. @Override
  11. publicvoidonClick(DialogInterfacedialog,intwhich){
  12. }
  13. })
  14. .setPositiveButton(R.string.confirm,newDialogInterface.OnClickListener(){
  15. publicvoidonClick(DialogInterfacedialog,intwhichButton){
  16. finish();
  17. }
  18. }).show();
  19. returntrue;
  20. }else{
  21. returnsuper.onKeyDown(keyCode,event);
  22. }
  23. }
  24. @Override
  25. protectedvoidonDestroy(){
  26. super.onDestroy();
  27. System.exit(0);
  28. //或者下面这种方式
  29. //android.os.Process.killProcess(android.os.Process.myPid());
  30. }

更多相关文章

  1. Android按返回键弹出对话框退出应用程序
  2. 【从头学android】第一个程序,点按钮显示Hello World
  3. android 比较精简的list对话框代码
  4. android 按钮的点击缩放
  5. 在android中获取系统后台运行的进程
  6. android中自定义的一个可以弹出类似于提示更新的对话框
  7. android 按钮按下效果2
  8. Android 跨进程SharedPreferences异常详解
  9. android 弹出对话框

随机推荐

  1. 在Android(安卓)Studio 3 中搭建protobuf
  2. android学习第一天
  3. ios开发之ios中控件
  4. 自学android,记录小知识一
  5. Android移动图片
  6. Googorola与七个小矮人
  7. Android 安全框架 -- 总概
  8. 将tensorflow训练好的模型移植到android
  9. PC端如何通过USB线与Android设备通信
  10. AndroidStudio使用技巧