双击返回结束、退出所有activity

电源工程师必看:平均电流模式BUCK双环控制详解(从传递函数到Psim仿真) 本文详细解析了平均电流模式BUCK变换器的双环控制策略,从传递函数推导到Psim仿真实现。针对电源工程师关注的环路设计和稳定性问题,深入比较了电压模式、峰值电流模式和平均电流模式的优缺点,并提供了12V/3A BUCK变换器的完整设计案例,帮助工程师掌握平均电流控制这一中高功率应用的首选方案。 阅读详情

双击返回结束

public long keybackTime = 0;

public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (Math.abs(System.currentTimeMillis() - keybackTime) > 2000) {
                keybackTime = System.currentTimeMillis();
                Toast.makeText(getBaseContext(), "再按一次返回键退出程序", Toast.LENGTH_SHORT).show();
            } else {
                finish();
            }
        } else if (event.getKeyCode() == KeyEvent.KEYCODE_HOME) {
            return false;
        }
        return true;
    }

当需要退出所有 Activity 时:

Android退出所有Activity最优雅的方式

转载 2016年01月14日 14:31:00

关于退出所有Activity,目前网上比较流行的方式大概有以下几种:

① 使用ActivityManager的方式;

② 自定义一个Activity集合类的方式;

③ 通过发送广播的方式;

④ 通过杀死当前应用进程的方式;

以上方式的具体实现大家可自行谷歌百度,此处不再赘述。

但是这些方式要么不太靠谱,要么有限制,要么不够优雅。今天我们就来说一个简单有效,优雅大方的方式来退出所有的Activity。

原理

先来说一下原理。我们知道,Activity有四种启动模式,分别为:standard(默认模式)、singleTop、singleTask、singleInstance。本方式需要使用的就是singleTask启动模式。

如果设置一个Activity的启动模式为singleTask,那么每次启动此Activity时系统都会检查当前任务栈中是否已经存在此Activity的实例。如果已经存在,则不再创建此Activity新的实例,而是调用已存在的Activity的onNewIntent()方法,并把intent作为此方法的参数传递给它。然后它就会被置于栈顶,并把它之前的所有的Activity移除掉。

原理实现

(我们先将进入应用的第一个Activity称为BaseActivity)。明白了基本原理之后就好办了,先将BaseActivity的启动模式设置为singleTask,并重写此Activity的onNewIntent()方法用来结束自己,之后会在此Activity上进入其他Activity进行数量不定的跳转。在需要退出时只需在当前Activity上调用startActivity(this,BaseActivity.class)会首先将除BaseActivity外的所有Activity结束掉,然后会自动调用BaseActivity的onNewIntent()结束掉自己,这样所有Activity都完美的退出了。

图解实现

为了便于理解,使用下图演示此方式的具体实现过程。

image

代码实现
第一步:在 AndroidManifest 中设置BaseActivity的启动模式为singleTask
android:launchMode="singleTask"
<application
    ...
    <activity
        android:name=".activity.BaseActivity"
        android:launchMode="singleTask"
        />
    ...    
</application>
第二步:重写BaseActivity的onNewIntent()方法
//声明一个静态常量,用作退出BaseActivity的Tag
public static final String EXIST = "exist";
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (intent != null) {//判断其他Activity启动本Activity时传递来的intent是否为空
        //获取intent中对应Tag的布尔值
        boolean isExist = intent.getBooleanExtra(EXIST, false);
        //如果为真则退出本Activity
        if (isExist) {
            this.finish();
        }
    }
}
第三步:在需要退出应用的Activity中启动BaseActivity
Intent intent = new Intent(this,BaseActivity.class);
//传递退出所有Activity的Tag对应的布尔值为true
intent.putExtra(BaseActivity.EXIST, true);
//启动BaseActivity
startActivity(intent);

(这个管理类暂时没发现用处,如果没有也可以实现退出)由于Activity都会放入到栈中管理,那我们可以仿照这个定义一个类似的Activity栈,每个打开一个Activity,就把它放入到我们自定义的Activity中,因此我们写一个Activity管理类来管理这些Activity,代码如下:

/**  
 * APP管理类  
 *  
 */    
public class AppManager {       
    private static Stack<Activity> activityStack;      
    private static AppManager instance;      
    private PendingIntent restartIntent;      

    private AppManager() {      
    }      

    /**   
     * 单一实例   
     */      
    public static AppManager getAppManager() {      
        if (instance == null) {      
            instance = new AppManager();      
        }      
        return instance;      
    }      

    /**   
     * 添加Activity到堆栈   
     */      
    public void addActivity(Activity activity) {      
        if (activityStack == null) {      
            activityStack = new Stack<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.remove(activity);      
            activity.finish();      
            activity = null;      
        }      
    }      

    /**   
     * 结束指定类名的Activity   
     */      
    public void finishActivity(Class<?> cls) {      
        for (Activity activity : activityStack) {      
            if (activity.getClass().equals(cls)) {      
                finishActivity(activity);      
            }      
        }      
    }      

    /**   
     * 结束所有Activity   
     */      
    public void finishAllActivity() {      
        for (int i = 0, size = activityStack.size(); i < size; i++) {      
            if (null != activityStack.get(i)) {      
                activityStack.get(i).finish();      
            }      
        }      
        activityStack.clear();      
    }      

    /**   
     * 退出应用程序   
     */      
    public void exitApp(Context context) {      
        try {                       
            finishAllActivity();      
            System.exit(0);    
            android.os.Process.killProcess(android.os.Process.myPid());    
        } catch (Exception e) {      
        }      
    }      
}    
OK,解决
CAN总线BusOff恢复机制详解:快慢恢复策略在车载网络中的实战应用 本文深入解析了CAN总线BusOff恢复机制,重点阐述了快慢恢复策略在车载网络中的工程应用。通过对比NXP S32K与STM32平台的实现代码,并结合CANoe仿真与参数优化方法,为工程师提供了从理论到实战的完整解决方案,旨在提升车载网络的可靠性与功能安全。 阅读详情

相关推荐

国家医保移动支付国密算法SM2签名验签、SM4加解密DLL

DLL,非.net开发,所以无需安装配置,直接程序引用开发即可,支持各类开发语言。已知省份有广西、贵州、安徽、河北、黑龙江、湖南、吉林、江苏、四川、新疆等各地方。国家医保移动支付国密算法SM2签名验签、SM4加解密DLL。//SM4加密与解密。支持医保移动支付(国家统一版),//SM2签名与验签。

4266

Android退出一个多Activity应用程序的方法

<br />对于单一Activity的应用来说,退出很简单,直接finish()即可。<br />当然,也可以用killProcess()和System.exit()这样的方法。<br /><br />但是,对于多Activity的应用来说,在打开多个Activity后,如果想在最后打开的Activity直接退出,上边的方法都是没有用的,因为上边的方法都是结束一个Activity而已。<br />当然,网上也有人说可以。<br />就好像有人问,在应用里如何捕获Home键,有人就会说用keyCode比较KE

juniorhope 2040

Coze知识库搭建:智能化管理与高效检索实践

知识管理系统是现代企业信息资产管理的核心基础设施,其核心原理是通过结构化存储和智能检索技术实现知识的快速流转。在技术实现上,基于NLP的语义理解引擎和知识图谱构建是关键,能够显著提升检索准确率和知识关联性。以Coze平台为例,其针对中文场景优化的分词算法和多模态处理能力,可有效解决技术文档管理中的术语识别和格式兼容问题。这类系统在开发团队知识沉淀、新员工培训等场景中价值显著,特别是当集成RBAC权限模型和自动化备份策略后,既能保障信息安全,又能实现持续的知识迭代。通过合理配置同义词扩展和权重调整,可使搜索命

weixin_29041195的博客 262

Android退出应用最优雅的方式

我们先来看看几种常见的退出方法(不优雅的方式) 一、容器式          建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity          import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.

源码有毒的专栏 9343

Jupyter Lab 无法启动 Kernel 问题排查与解决总结

使用 curl,telnet,或 Python websocket-client 库可以本地模拟 WebSocket 握手行为,帮助分析服务端响应状态。避免使用 http:// + ws:// 组合方式部署 Jupyter Lab,特别是在远程或跨域访问场景。建议统一采用 https:// + wss:// 方式部署,确保浏览器信任并兼容。确认 WebSocket 已升级为 wss://,内核可正常启动。但在远程访问时,浏览器出于安全策略,默认拒绝 ws:// 协议。

weixin_43866043的博客 1859

保姆级教程:2026版Windows电脑换新,微信QQ聊天记录无损搬家(附路径修改避坑指南)

本文提供2026版Windows电脑换新时微信QQ聊天记录无损迁移的保姆级教程,涵盖最新版微信/QQ的存储路径修改和避坑指南。通过详细步骤和实战技巧,确保数据迁移过程中不丢失任何珍贵对话记录和文件,特别适合需要保留完整聊天记录的用户。

weixin_42629815的博客 2485

四种结束当前的activity方法

每一个activity都有自己的生命周期,被打开了最终就要被关闭。 四种结束当前的activity方法 Java代码 //关闭当前activity方法一 finish(); //关闭当前界面方法二 android.os.Process.killProcess(android.os.Process.myPid()); //关闭当前界面方法三 System.exit(

shantan的专栏 2万+

Parasoft C++Test软件集成测试(部件测试)_实例讲解

本文以一组功能函数组件作为示例,讲解了如何使用C++Test进行软件集成测试。本文的示例比较简单,但是思路、方法和流程都是通用的,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 734

Android退出应用最优雅的方式(改进版)

由于应用启动退出之后,会在应用中反复跳转页面,在这个过程中,一部分页面可能会驻留的内存中,导致无法退出应用的情况,今天我们就来讲如何以优雅的方式退出应用

源码有毒的专栏 3万+

台球 PCOL:极致物理还原的网页斯诺克引擎(附源码深度解析)

*完整源码地址**:[https://github.com/billiards/pcol-core](https://github.com/billiards/pcol-core)(包含详细文档与示例)通过这个项目,我们不仅创建了一个游戏,更构建了一个**可扩展的物理引擎框架**,为网页端复杂物理模拟开辟了新的可能性。**在线体验**:[https://pcol.billiards](https://pcol.billiards)(支持移动端触控操作)clone.velocity.x *= -0.92;

Loving_enjoy的博客 2799

Android系统开机时间分析与优化指南

本文系统阐述了Android开机时间优化的全流程技术方案。首先详细解析了从电源键按下到桌面显示的完整启动流程及关键事件序列,然后介绍了秒表计时、日志分析和自动化脚本三种测量方法。重点从底层和上层两个维度提出了具体优化措施:底层包括编译器优化、内核驱动裁剪和日志精简;上层涵盖系统服务参数调整、应用预优化和功能组件精简。最后提供了验证工具和方法,并强调优化需要在性能、功耗和功能间取得平衡。通过这套系统化方案,可有效提升Android设备的开机速度与用户体验。

学无止境 355

AppManager管理Activity

在开发app时候,要考虑很多因素。内存是一个大问题。有一个管理activity的工具类,能给每次开发减去大量麻烦。 public class AppManager { private static Stack activityStack; private static AppManager instance; private AppManager(){} /** * 单一实例

我是一只小鸟。 771

WPS访问权限不足怎么解决??具体怎么操作?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 4171

Android 退出多Activity的application的方式

Android 退出多Activity的application的方式

歪比巴卜 408

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

activity一个管理类,记录一下。

什么也不说直接线上代码,简单无脑 public class AppManager { private static Stack<Activity> activityStack; private static AppManager instance; private AppManager() { } /** * 单一实例 */ public static AppManager getAppManager() {

q992767879的博客 118

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 按两次返回键强制退出整个APP

首先介绍了android几组结束Activity和整个APP的方法及特点,然后给出了按两次返回键强制退出整个APP的代码。

Melody_ZQ的博客 3248

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Android】APP一键退出

只是备份一下知识,下次方便找收集活动的类public class ActivityCollector { public static List<Activity> activities=new ArrayList<Activity>(); public static void addActivity(Activity activity){ activities.add(

BHRSFURGS的博客 554

$Android连续按返回键两次实现退出程序

  思路:重写Activity的onKeyDown方法,判断按键是不是返回键,如果是,则再判断按下的时间和上次按下的时间之间的差值(毫秒数)是不是大于2000,如果不大于,则用finish()方法结束程序。Demo如下: 1 import android.app.Activity; 2 import android.os.Bundle; 3 import android.view....

weixin_30408309的博客 76

Activity退出的几种方式

通常的,我们点击返回键,如果我们没有做特殊处理,那么我们的activity会被销毁,那他是怎么实现的呢在监听onkeyUP事件上,我们发现父类的处理是这样的,如果是back事件,会走onBackPressed&&!return;if (!return;if (!return;try {});finishAfterTransition 会调用finish 实现销毁if (!finish();通常我们在app需要实现点击两次退出的,可以在onPressed中做文章。

bolt_007的博客 1694

Android 双击退出程序但活动不结束功能!

本片博客将详细介绍: Android 活动中 onKeyDown() onKeyUp() onBackPressed() 三个方法的关系及使用 最后给出实现双击退回桌面的源码实例 大家经常能接到一个需求 app 退到主界面之后,点击一下 home 键弹出提示:”再点一下退出程序“,要实现这个功能,首先就要先搞懂这三个方法之间的调用关系。 所以,见名知意: onKeyDow...

圆号本号 899

android 返回键销毁程序_Android-返回桌面?退出程序?

android有时候我们希望用户双击返回键的时候,再去退出应用,那么怎么实现这种需求呢?有时候我们希望用户点击一次返回键的时候,不是退出应用,而是返回到桌面,那么怎么实现这种效果呢?如何管理整个应用的各个环节,做到退出应用呢?在这里,对相关方法大概整理。一、容器式我们在BaseActivity 建立一个全局容器,把所有的Activity存储起来统一维护,另外可以在Base里可以处理一些界面的共同逻...

weixin_39599705的博客 786

Android app退出(AppManager对Activity的管理)

转自优快云 https://blog.youkuaiyun.com/fzkf9225/article/details/73480469 实际开发中会有很多关于app的退出问题,我个人比较常见的有两种: 一、双击退出 比如说我们在首页的时候需要一个双击退出的方法,点击第一次手机的返回键时提示:“再点一次退出应用”。之类的话语,我们可以这样做,对重写onKeyDown方法,当他第一次点击的时候提示文字,给...

weixin_30448685的博客 353

android_双击退出

/** * 设置高速双击退出程序 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_BACK) { exitBy2Click(); ...

aofan9566的博客 134

一个简单的demo模拟登录过程页面跳转逻辑和双击退出应用

直接上代码 APP:public class APP extends Application { public List activityList; private static APP appInstance; @Override public void onCreate() { super.onCreate(); appIn

JMathias的博客 1456

自定义基类activity实现双击back键退出应用

上一篇文章我写了退出应用的其中一个方法:利用广播退出应用,地址:http://blog.youkuaiyun.com/gxp1182893781/article/details/77993561 但是那种方法如果只是用来实现退出应用,似乎就太浪费代码量了,因为每一个activity都要创建listener并调用begin方法开始监听广播,还要在onDestory方法中反注册监听器,代码量似乎有点大。

泥巴城 的博客 508

Android 连续点击两次返回退出app

//点击两次退出程序 有时间间隔 间隔内点击则退出程序 否则 则提示 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if ((System.currentTimeMillis() - mExitTime) > 2000) { KMToast.show("再按一次退出程序"); ...

like_lgg的博客 1036
上一篇: js交互:下载图片到图库
下一篇: webview常见问题
马克斯丶
博客等级 码龄9年 4粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值