Android 实现双击退出的功能

 更新时间:2016年07月26日 15:32:24   投稿:lqh  
本文主要介绍Android 实现双击退出,这里给大家提供代码示例,方便大家理解查看,有需要的小伙伴可以参考下

实现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应用的启动页

    简单实现Android应用的启动页

    这篇文章主要介绍了简单实现Android应用的启动页,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Flutter实现购物车功能(代码+逻辑)

    Flutter实现购物车功能(代码+逻辑)

    本文主要介绍了Flutter实现购物车功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • 深入解读Android的内部进程通信接口AIDL

    深入解读Android的内部进程通信接口AIDL

    这篇文章主要介绍了Android的内部进程通信接口AIDL,重点讲解了进程间的通信与AIDL内存使用方面的parcelable接口的实现,需要的朋友可以参考下
    2016-04-04
  • Kotlin Flow常见场景下的使用实例

    Kotlin Flow常见场景下的使用实例

    这篇文章主要为大家介绍了Kotlin Flow常见场景下的使用实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Android测量每秒帧数Frames Per Second (FPS)的方法

    Android测量每秒帧数Frames Per Second (FPS)的方法

    这篇文章主要介绍了Android测量每秒帧数Frames Per Second (FPS)的方法,涉及Android针对多媒体文件属性操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android加载Assets目录中Xml布局文件

    Android加载Assets目录中Xml布局文件

    这篇文章主要为大家详细介绍了Android加载Assets目录中Xml布局文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android基于高德地图完全自定义Marker的实现方法

    Android基于高德地图完全自定义Marker的实现方法

    这篇文章主要给大家介绍了关于Android基于高德地图完全自定义Marker的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Android编程单元测试实例详解(附源码)

    Android编程单元测试实例详解(附源码)

    这篇文章主要介绍了Android编程单元测试,结合完整实例形式详细分析了Android单元测试的具体步骤与相关技巧,并附带完整实例代码供读者下载参考,需要的朋友可以参考下
    2015-11-11
  • Android百度地图定位、显示用户当前位置

    Android百度地图定位、显示用户当前位置

    这篇文章主要为大家详细介绍了Android百度地图定位、显示用户当前位置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Android 中使用RadioGroup和Fragment实现底部导航栏的功能

    Android 中使用RadioGroup和Fragment实现底部导航栏的功能

    这篇文章主要介绍了Android 中使用RadioGroup+Fragment实现底部导航栏的功能,整体文章大概分为两部分介绍,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-06-06

最新评论