寸阳分阴须爱惜,休负春色与时光。这篇文章主要讲述Android项目实战:安卓应用程序退出的三种方法相关的知识,希望能为你提供帮助。
原文:Android项目实战(二):安卓应用程序退出的三种方法现在的APP退出的时候都不是让用户点击了“
后退键”
就退出。防止用户点错了后退键而造成的用户体检不好。
【Android项目实战(安卓应用程序退出的三种方法)】一年前搞的Demo代码不见了,重新写下就当是复习和以后直接拿来用把
目前流行的解决一般分为两种:
一、按一次后退键显示一个对话框决定是否退出
1@Override 2public boolean onKeyDown(int keyCode, KeyEvent event) { 3// TODO Auto-generated method stub 4//点击了后退键 5if(keyCode == KeyEvent.KEYCODE_BACK) 6{ 7//创建对话框构建器对象 8AlertDialog.Builder builder = new AlertDialog.Builder(this); 9builder.setTitle("温馨提示")//对话框标题 10.setMessage("确定要退出么?")//对话框内容 11.setIcon(R.drawable.ic_launcher)//对话框图标 12.setCancelable(false) //点击对话框之外的部分是否取消对话框 13.setPositiveButton("确定", new OnClickListener() { 14 15@Override 16public void onClick(DialogInterface dialog, int which) { 17// TODO Auto-generated method stub 18finish(); //结束当前Activity 19} 20}) 21.setNegativeButton("取消", new OnClickListener() { 22 23@Override 24public void onClick(DialogInterface dialog, int which) { 25// TODO Auto-generated method stub 26dialog.dismiss(); //取消对话框 27} 28}); 29//生成对话框 30Dialog dialog = builder.create(); 31//显示对话框 32dialog.show(); 33} 34 35return super.onKeyDown(keyCode, event); 36}
二、连续按两次后退键退出,一般两次按键时间间隔为2秒
(1)一般思路方法:
思路。一个应用程序第一次按后退键为 “ 第一次” 之后的每次按后退键:对于上一次为“ 第二次” ,对于下一次为"第一次" ,判断两次按键时间的差的绝对值是否小于2000(毫秒)
1 public class MainActivity extends Activity { 2long timefirst = 0; //一定要是long类型的 3long timesecond = 0; 4boolean isKeyBack = false; //当为false ,为应用程序第一次按后退键,第一次按键之后 永为true , 5@Override 6protected void onCreate(Bundle savedInstanceState) { 7super.onCreate(savedInstanceState); 8setContentView(R.layout.activity_main); 9} 10 11@Override 12public boolean onKeyDown(int keyCode, KeyEvent event) { 13// TODO Auto-generated method stub 14 15if(keyCode == KeyEvent.KEYCODE_BACK)//如果点击了撤退键 16{ 17if(isKeyBack==true) //如果isKeyBack==true 说明第二次点击后退键 18{ 19timesecond = System.currentTimeMillis(); //记录第二次按键的时间 20System.out.println("2"+timesecond); 21 22if(Math.abs(timesecond-timefirst)< 2000)//说明两次按键间隔小于2秒,满足退出条件,退出Activity 23{ 24finish(); 25} 26else 27{ 28timefirst= System.currentTimeMillis(); //记录第一次按键的时间 29Toast.makeText(this, "再按一次退出程序", 1).show(); 30//不满足条件,则设置此次为第一次按键,因为isKeyBack为true 31//屏蔽后退键的撤销功能 32return true; 33} 34} 35else if(isKeyBack==false) //如果isKeyBack为false 说明第一次点击后退键 36{ 37timefirst= System.currentTimeMillis(); //记录第一次按键的时间 38Toast.makeText(this, "再按一次退出程序", 1).show(); 39System.out.println("1"+timefirst); 40isKeyBack = true; 41//屏蔽后退键的撤销功能 42return true; 43 44} 45} 46 47return super.onKeyDown(keyCode, event); 48}
(2)优化方法
1 public class MainActivity extends Activity { 2long timefirst = 0; //一定要是long类型的 3long timesecond = 0; 4boolean isKeyBack = false; 5@Override 6protected void onCreate(Bundle savedInstanceState) { 7super.onCreate(savedInstanceState); 8setContentView(R.layout.activity_main); 9} 10 11@Override 12public boolean onKeyDown(int keyCode, KeyEvent event) { 13// TODO Auto-generated method stub 14if(keyCode==KeyEvent.KEYCODE_BACK) 15{ 16timesecond = System.currentTimeMillis(); //记录当前按键时间,相当于上一次为第二次按键 17if(timesecond-timefirst< 2000) //如果两次按键时间小于2000毫秒,结束应用程序 18{ 19finish(); 20} 21else 22{ 23Toast.makeText(this, "再按一次退出程序", 1).show(); 24timefirst = timesecond; //如果不能退出,则当前按键时间设为第一次,下一次为第二次 25return true; //屏蔽后退键的效果 return false; 也可以 ,只要不让方法执行super.onKeyDown(keyCode, event); 即可
26} 27} 28 return super.onKeyDown(keyCode, event); 29 }
全部代码:
文章图片
文章图片
1 package com.example.menu; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.app.AlertDialog; 6 import android.app.Dialog; 7 import android.content.DialogInterface; 8 import android.content.DialogInterface.OnClickListener; 9 import android.view.KeyEvent; 10 import android.view.Menu; 11 import android.widget.Toast; 12 13 public class MainActivity extends Activity { 14long timefirst = 0; //一定要是long类型的 15long timesecond = 0; 16boolean isKeyBack = false; 17@Override 18protected void onCreate(Bundle savedInstanceState) { 19super.onCreate(savedInstanceState); 20setContentView(R.layout.activity_main); 21} 22 23@Override 24public boolean onKeyDown(int keyCode, KeyEvent event) { 25// TODO Auto-generated method stub 26if(keyCode==KeyEvent.KEYCODE_BACK) 27{ 28timesecond = System.currentTimeMillis(); //记录当前按键时间,相当于上一次为第二次按键 29if(timesecond-timefirst< 2000) //如果两次按键时间小于2000毫秒,结束应用程序 30{ 31finish(); 32} 33else 34{ 35Toast.makeText(this, "再按一次退出程序", 1).show(); 36timefirst = timesecond; //如果不能退出,则当前按键时间设为第一次,下一次为第二次 37return true; //屏蔽后退键的效果 38} 39} 40return super.onKeyDown(keyCode, event); 41} 42 43 //@Override 44 //public boolean onKeyDown(int keyCode, KeyEvent event) { 45 //// TODO Auto-generated method stub 46 // 47 //if(keyCode == KeyEvent.KEYCODE_BACK)//如果点击了撤退键 48 //{ 49 //if(isKeyBack==true) //如果isKeyBack==true 说明第二次点击后退键 50 //{ 51 //timesecond = System.currentTimeMillis(); //记录第二次按键的时间 52 //System.out.println("2"+timesecond); 53 // 54 //if(Math.abs(timesecond-timefirst)< 2000)//说明两次按键间隔小于2秒,满足退出条件,退出Activity 55 //{ 56 //finish(); 57 //} 58 //else 59 //{ 60 //timefirst= System.currentTimeMillis(); //记录第一次按键的时间 61 //Toast.makeText(this, "再按一次退出程序", 1).show(); 62 ////不满足条件, 63 //return true; 64 //} 65 //} 66 //else if(isKeyBack==false) //如果isKeyBack为false 说明第一次点击后退键 67 //{ 68 //timefirst= System.currentTimeMillis(); //记录第一次按键的时间 69 //Toast.makeText(this, "再按一次退出程序", 1).show(); 70 //System.out.println("1"+timefirst); 71 //isKeyBack = true; 72 //return true; 73 // 74 //} 75 //} 76 // 77 //return super.onKeyDown(keyCode, event); 78 //} 79 80 //@Override 81 //public boolean onKeyDown(int keyCode, KeyEvent event) { 82 //// TODO Auto-generated method stub 83 ////点击了后退键 84 //if(keyCode == KeyEvent.KEYCODE_BACK) 85 //{ 86 //AlertDialog.Builder builder = new AlertDialog.Builder(this); 87 //builder.setTitle("温馨提示")//对话框标题 88 //.setMessage("确定要退出么?")//对话框内容 89 //.setIcon(R.drawable.ic_launcher)//对话框图标 90 //.setCancelable(false) //点击对话框之外的部分是否取消对话框 91 //.setPositiveButton("确定", new OnClickListener() { 92 // 93 //@Override 94 //public void onClick(DialogInterface dialog, int which) { 95 //// TODO Auto-generated method stub 96 //finish(); //结束当前Activity 97 //} 98 //}) 99 //.setNegativeButton("取消", new OnClickListener() { 100 // 101 //@Override 102 //public void onClick(DialogInterface dialog, int which) { 103 //// TODO Auto-generated method stub 104 //dialog.dismiss(); //取消对话框 105 //} 106 //}); 107 // 108 //Dialog dialog = builder.create(); 109 //dialog.show(); 110 //} 111 // 112 //return super.onKeyDown(keyCode, event); 113 //} 114 115 }
应用程序退出提示
三、连续按两次后退键退出,一般两次按键时间间隔为2秒(handler方法)
设置一个标记变量isExit = false;
当点击后退按钮的 时候
(1)如果isExit为true 退出程序
(2)如果isExit为false 则提示“ 两秒内再次后退退出程序” ,并是isExit为true,同时发送一个两秒延迟消息,两秒后isExit为false,这样当消息未发送出去前的两秒,再次后退 便可退出程序
1 @Override 2public boolean onKeyDown(int keyCode, KeyEvent event) { 3 4switch (keyCode){ 5 6 7case KeyEvent.KEYCODE_BACK: 8 9if(isExit){ 10 11return super.onKeyDown(keyCode, event); 12}else { 13 14Toast.makeText(this, "再按一下退出程序", Toast.LENGTH_SHORT).show(); 15isExit = true; 16 17new Thread(new Runnable() { 18 19@Override 20public void run() { 21 22try { 23 24Thread.sleep(2000); 25 26isExit = false; 27 28} catch (InterruptedException e) { 29e.printStackTrace(); 30} 31 32} 33 34}).start(); 35return false; 36} 37 38default: 39return super.onKeyDown(keyCode, event); 40 41} 42}
推荐阅读
- Android项目实战(三十一)(异步下载apk文件并安装(非静默安装))
- Android项目实战(JazzyGridView和JazzyListView的使用)
- Android项目实战(自定义倒计时的TextView)
- Android项目实战(实现第一次进入软件的引导页)
- Android项目实战(三十八)(2017最新 将AndroidLibrary提交到JCenter仓库(图文教程))
- Android项目实战(ViewPager切换动画(3.0版本以上有效果))
- Android项目实战(十七)(QQ空间实现—— 分享功能 / 弹出PopupWindow)
- Android项目实战(四十二)(启动页优化,去除短暂白屏或黑屏)
- Android项目实战(三十二)(圆角对话框Dialog)