Android 实现双击退出的功能
作者:lqh 时间:2021-06-16 09:08:45
实现android双击后退键退出当前APP功能
实现该功能基本思路是,
1, 监听后退键 , 比较两次后退间隔 , 低于两秒则出发退出
2, 退出当前APP
我选择在基类中BaseActivity 中设置监听,代码如下:
public void onBackPressed() {
//Preferences 中获取是否双击退出
boolean isDoubleClick = true;
//BaseApplication.get("ifDoubleClickedBack", true);
if (isDoubleClick) {
long curTime = SystemClock.uptimeMillis();
if ((curTime - mBackPressedTime) < (2 * 1000)) {
finish();
//activity栈管理
AppManager.getAppManager().AppExit();
} else {
mBackPressedTime = curTime;
Toast.makeText(this, "再次点击退出", Toast.LENGTH_SHORT).show();
}
} else {
finish();
}
}
在退出当前APP中,参考开源中国,封装了activity栈
实例代码:
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager() {
}
/**
* 单一实例
*/
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
return instance;
}
/**
* 获取指定的Activity
*
* @author kymjs
*/
public static Activity getActivity(Class<?> cls) {
if (activityStack != null)
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
return activity;
}
}
return null;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity) {
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null && activityStack.contains(activity)) {
activityStack.remove(activity);
activity.finish();
}
}
/**
* 结束指定的Activity
*/
public void removeActivity(Activity activity) {
if (activity != null && activityStack.contains(activity)) {
activityStack.remove(activity);
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
break;
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
finishActivity(activityStack.get(i));
}
}
activityStack.clear();
}
/**
* 退出应用程序
*/
public void AppExit() {
try {
finishAllActivity();
// System.exit(0);
} catch (Exception e) {
}
}
}
思路就是在每次activity 压入activity栈中管理
在退出时遍历栈,挨个finish
希望本文所述对大家的Android程序设计有所帮助。
标签:Android,双击退出
0
投稿
猜你喜欢
C#使用opencv截取旋转矩形区域图像的实现示例
2023-11-12 22:20:44
Java判断ip是否为IPV4或IPV6地址的多种方式
2023-03-28 01:18:31
C#设计模式之建造者模式生成器模式示例详解
2021-12-11 05:50:57
Android-SPI学习笔记
2022-05-15 17:35:33
java中addMouseListener()方法的使用
2021-07-07 19:29:35
C#使用HtmlAgilityPack抓取糗事百科内容实例
2022-01-16 10:45:16
浅谈c#开发者应该了解的15个特性
2022-03-02 17:14:32
C#多态的三种实现方式(小结)
2022-12-29 18:10:57
Android jni调试打印char阵列的实例详解
2022-06-18 14:55:40
SpringBoot java-jar命令行启动原理解析
2022-02-02 10:32:22
Java进阶:Struts多模块的技巧
2023-06-18 09:40:47
Java实战之王者荣耀的英雄是怎么产生的?
2021-08-25 12:35:49
java的基本数据类型及属性
2021-08-10 19:31:49
SpringBoot 如何从容器中获取对象
2023-12-06 08:20:40
Java定位问题线程解析
2023-08-09 22:04:27
Java多线程 ReentrantLock互斥锁详解
2022-07-23 21:21:06
mybatis中使用InsertProvider注解报错解决全过程
2021-06-25 18:36:42
c# 通过内存映射实现文件共享内存的示例代码
2023-03-02 12:15:35
Java在web页面上的编码解码处理及中文URL乱码解决
2023-08-25 11:10:19
Java技巧函数方法实现二维数组遍历
2023-09-12 23:25:00