Android完全退出应用程序 .

实现Android应用完全退出的多种策略 本文还有配套的精品资源,点击获取 简介:在Android开发中,根据用户需求确保应用程序完全退出,涉及到理解应用生命周期和使用不同的退出方法。教程将围绕应用生命周期和退出策略进行探讨,包括Activity生命周期管理、Intent标志位使用、杀死进程、利用BroadcastReceiver以及关闭Service和BroadcastReceiver等技术点。开发者需要在满足用... 阅读详情
 

在一个项目中,要退出android程序,试了restartPackage、 killBackgroundProcesses 、通过异常并在Application的子类中重新注册Thread的 Thread.UncaughtExceptionHandler接口+异常方式,等等,都没有效果。

最后发现其实只要在从一个activity A 跳到另一个activity B 时,调用了A的finish方法,程序就能退出,但这样不能实现Back操作了,最后想一个办法:我们为什么不自己控制程序创建的activity呢?比如我们可以把程序创建的avtivity放在一个全局变量里,在退出程序的时候取出每个还存在的activity,并对每个activity依次调用finish最后程序就正常退出了。

先做以下几点说明:

 

(1)我们可以重写一个Activity管理类ActivityManager,里面有一个堆栈结构,用来存放用户显示的activity,并暴露几个方法,一个向堆栈结构中加入Activity,它主要用来当新建一个Activity时加入堆栈,另外一个从堆栈结构中取出一个Activity,当用户调用Back按键时,要从堆栈中删除无用的activity,最后定义一个系统退出时清空activity方法,并在清空Activity时调用每个Activity的finish方法完成内存资源的释放。
(2)为了共享复杂的数据类型,我们可以采用重写Application类的方法,在这个类里面定义一个成员---Activity管理类ActivityManager,这样它就可以被所有的Activity共享了。
(3)在适当的时候我们调用ActivityManager的入堆栈操作和出堆栈操作就行了。比如,在我的需求里,我在onCreate时调用入堆栈操作,在用户进行点击Back按键时进行出堆栈操作。
(4)为了减少代码的重复性,我们可以在实际操作时,自定义一个Activity基类,重写里面的onCreate()方法和onBackPressed方法,onCreate方法里我们把当前的Activity放入自定义ActivityManager,onBackPressed我们将当前Activity从ActivityManager中弹出。
 
先看ActivityManager类主要代码。
import java.util.Stack;
public class ActivityManager {
    private static Stack<Activity> activityStack;
    private static ActivityManager instance;
    private ActivityManager() {
    }
    public static ActivityManager getScreenManager() {
        if (instance == null) {
            instance = new ActivityManager();
        }
        return instance;
    }
    //退出栈顶Activity
    public void popActivity(Activity activity) {
        if (activity != null) {
           //在从自定义集合中取出当前Activity时,也进行了Activity的关闭操作
            activity.finish();
            activityStack.remove(activity);
            activity = null;
        }
    }
    //获得当前栈顶Activity
    public Activity currentActivity() {
        Activity activity = null;
       if(!activityStack.empty())
         activity= activityStack.lastElement();
        return activity;
    }
    //将当前Activity推入栈中
    public void pushActivity(Activity activity) {
        if (activityStack == null) {
            activityStack = new Stack<Activity>();
        }
        activityStack.add(activity);
    }
    //退出栈中所有Activity
    public void popAllActivityExceptOne(Class cls) {
        while (true) {
            Activity activity = currentActivity();
            if (activity == null) {
                break;
            }
            if (activity.getClass().equals(cls)) {
                break;
            }
            popActivity(activity);
        }
    }
}
 
再看看自定义的Application类,有关网络连接处理的代码可以忽略不管。
public class ApplicationEx extends Application {
    private static final String TAG = "ApplicationEx";
    private HttpClient httpClient; //采用apache网络连接组件
    private ActivityManager activityManager = null;
    public ApplicationEx() {
    }
    public ActivityManager getActivityManager() {
        return activityManager;
    }
    public void setActivityManager(ActivityManager activityManager) {
        this.activityManager = activityManager;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        httpClient = createHttpClient();
      //初始化自定义Activity管理器
        activityManager = ActivityManager.getScreenManager();
    }
    @Override
    public void onLowMemory() {
        super.onLowMemory();
        shutdownHttpClient();
    }
    @Override
    public void onTerminate() {
        super.onTerminate();
        shutdownHttpClient();
    }
    private void shutdownHttpClient() {
        if (httpClient != null && httpClient.getConnectionManager() != null) {
            httpClient.getConnectionManager().shutdown();
        }
    }
    private HttpClient createHttpClient() {
        Log.d(TAG, "createHttpClient()...");
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
        HttpProtocolParams.setUseExpectContinue(params, true);
        SchemeRegistry schReg = new SchemeRegistry();
        schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
       //解决多线程访问安全问题
        ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(params, schReg);
        return new DefaultHttpClient(connectionManager, params);
    }
    public HttpClient getHttpClient() {
        if (httpClient != null) {
            return httpClient;
        } else {
            return createHttpClient();
        }
    }
}
 再看看我们自定义的一个Acitivity基类。
public abstract class AbstractTemplateActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ApplicationEx application = (ApplicationEx) this.getApplication();
        application.getActivityManager().pushActivity(this);
     
    }
 
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        ApplicationEx application = (ApplicationEx) getApplication();
        application.getActivityManager().popActivity(this);
    }
  
}
这样只我们的Activity都继承AbstractTemplateActivity ,我们就不需要在每个Activity中写    ApplicationEx application = (ApplicationEx) this.getApplication();       application.getActivityManager().pushActivity(this); 等相关代码了。
在android 2.1以上的版本都能实现Activity的完全退出。
Android完全退出应用程序的方法 主要介绍了Android完全退出应用程序的方法,实例分析了Android退出应用程序的相关方法与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下 立即下载

相关推荐

Quartus II设计程序计数器PC、由PC产生ROM的地址(含仿真)

设计程序计数器PC,正常工作模式下,系统启动,设置PC的初始值,之后每来一个clk,PC的输出值应该增加1;当程序发生跳转时,PC的值应该发生改变,级将跳转的地址值赋进行输出。PC后端连接一个ROM,由PC来产生ROM的地址,仿真进行验证。

m0_73700621的博客 1817

Android App 退出解决方案

1. Dalvik VM的本地方法android.os.Process.killProcess(android.os.Process.myPid()) //获取PID System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出2. 任务管理器方法 首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限 android

飞天小牛的专栏 956

BGE-Reranker-v2-M3介绍

重排序模型介绍

吉米_王 5898

android完全退出应用的4种方法

在Android开发 http://www.maiziedu.com/course/android/中,我们运行了应用后,都需要退出应用,那常见的退出应用的实现方式有哪些呢?今天就分享几种退出android应用的方法,一起来看看吧~~ 一、容器式 建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity import java.util.

wangyihero8的专栏 989

基于Codex平台与AI Agent技能开发,实现抖音爆款视频分析与脚本自动生成

大家好,我是专注于AI应用开发的技术博主。最近在探索如何利用AI工具自动化内容创作时,我发现了一个非常有趣的组合:通过Codex平台创建自定义的Skill(技能),来批量分析抖音平台的爆款视频,并基于分析结果自动生成新的带货视频脚本。这听起来像是内容团队的“黑科技”,但实现起来其实有清晰的路径可循。本文将为你完整拆解这个实战项目,从环境搭建、Skill编写、数据抓取到视频脚本生成,手把手教你打造自己的“AI内容助理”。无论你是想了解AI Agent的开发,还是对短视频自动化创作感兴趣,都能从本文中获得可直接

weixin_34110749的博客 645

告别Vivado自带编辑器!手把手教你用Sublime Text 4 + Icarus Verilog搭建FPGA开发环境(Windows 10/11)

本文详细介绍如何在Windows 10/11系统下,使用Sublime Text 4和Icarus Verilog搭建高效的FPGA开发环境,替代Vivado自带编辑器。通过配置语法检查、代码高亮和智能补全等功能,提升Verilog开发效率,实现专业级工作流。

weixin_30684743的博客 430

android彻底退出应用_Android退出应用程序方法总结

退出图在Android开发中,我们运行了应用程序后,都需要退出应用的,那么该如何退出应用,又都有哪些实现方式呢?今天就为大家整理分享一些退出应用程序的方法,一起来看看吧!更新内容Ver:v1任务管理器方法补充新增监听式退出方法Ver:v2任务管理器方法修正新增销毁任务栈退出方法1. finish方法finish();该方法只是结束当前Activity,系统将最上面的Activity移出了栈,并没有...

weixin_42509196的博客 3824

成本中心(CO)和利润中心(PCA)是管理会计模块的核心组件

SAP中成本中心(CO)和利润中心(PCA)凭证处理存在差异:①外部交易(如费用支付、销售)会生成FI借贷凭证;②内部成本分摊和转移仅产生CO/PCA管理凭证,通过次级成本要素或利润中心转移科目记录,不涉及FI模块。核心区别在于是否涉及企业实际收支:实际收支触发FI凭证,内部核算仅生成管理会计凭证。系统通过这种机制实现财务会计与管理会计的集成与分离。

金牌架构师 1130

Android 应用技巧: 手把手教你 优雅实现 “一键退出 App”

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节祝大家都能得到自己心仪工作。一个人可以走的很快,但一群人才能走的更远。

2401_84160325的博客 817

PCL 法向量夹角剔除错误匹配点对【2026最新版】

实现了一种简单的基于对应点法线角度的对应关系去除方法。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 41万+

【Jenkins】Jenkins :首次登录直接使用 admin 账户

目录 一、使用admin账户 二、修改admin用户密码 三、管理视图 一、使用admin账户 安装时,自定义安装,选择必要的插件安装,设置Jenkins的URL为: http://本机或服务器IP:8080 然后在创建第一个管理者界面,直接选择:使用admin 二、修改admin用户密码 进入:系统管理——管理用户——选中用户——点击设置图标——修改密码: 三、...

顾三殇 —— 博客空间(软件测试) 1万+

Android安卓完全退出关闭应用程序

我在项目中的做法是:写个基类的Activity,每个Activity都继承自这个基类Activity,在这个基类Activity中写个广播,当程序退出的时候,发送关闭Activity的广播就可以了。 关于完全退出Android程序,网上这方面的帖子很多,方法也很多。记得当时自己写的第一个比较完整的项目的时候就遇上了这个问题,由于对Activity的生命周期了解不够,又

icewst的专栏 1123

使用AI预测彩票的架构思路

彩票是随机的数字游戏,不要过度依赖AI,本文仅供娱乐研究

淘淘小窝 9414

如何完全退出android应用程序

Android应用程序开发中,如何完全退出android应用程序?网上朋友们也给出了各种答案,很多都是自己想的办法。如:android.os.Process.killProcess(android.os.Process.myPid());或:System.exit(0);还有推土机式,预先设置开始的空activity,关闭应用程序时定位到此activity,再逐一关闭等。诸如此类很多方法。这几天闲...

xu13879531489的专栏 632

Statistics and Machine Learning Toolbox

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android 完全退出应用程序

android 完全退出应用程序     android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中Activity退出,调用上面的方

u014558889的专栏 572

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android完全退出应用程序

最近开发的一个应用程序中,需要在两个activity之间来回切换,但又不想让这两个activity在切换时候重新创建,于是使用了android:launcher属性为singleInstance,这样切换不重新创建的目标达到了。但想在其中之一在按返回键的时候完全退出应用程序,google了下,说是使用 // 关闭进程 android.os.Process.killProcess(andr

CmdMac的专栏 1016

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android应用程序退出,Android学习历程之完全退出应用程序App

‍‍‍‍‍ 完全退出应用程序App本文的方法是我从别的作者处借鉴过来的,原地址已忘,见谅。它采用的是创建一个类继承Application,将app中的所有activity都添加到一个List集合中,再点击退出按钮时,遍历集合,直接销毁所有activity。一 . 创建自定义类publicclassExitApplicationextendsAppl...

weixin_36060412的博客 232

android如何完全退出应用程序

在程序内维护一个activity list,在响应应用程序退出的时候,遍历该list,调用每一个Activity的finish()方法,然后调用 android.os.Process.killProcess(android.os.Process.myPid()) 或者

cmoaciopm的专栏 746

android彻底退出应用_Android完全退出应用程序的方法

本文实例讲述了Android完全退出应用程序的方法。分享给大家供大家参考。具体如下:在Android中,如果想退出Android程序,一般都是调用finish()、System.exit(0)、android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序的效果,这是因为调用...

weixin_42519772的博客 2416

android 退出程序提醒,android开发之应用程序如何完全退出

之前忘记在哪看到一篇关于“android应用程序如何完全退出”的Blog,写的不错,我想这对很多人都有用,为了文章的原创,因此我结合了自己的代码环境,把这个经验分享给大伙。第一步:创建一个Activity管理类,用来管理所有被用户点击过而没有被finish()掉的Activity:importjava.util.Stack;importandroid.app.Activity;importa...

weixin_39610759的博客 130

android开发之应用程序如何完全退出

一步两步,是帅哥的步伐,是帅哥的成长!

ZaneLove's blog 1125

Android 完全退出应用程序

开通博客也有几天了,今天突然想xie'dian

fireflowerwq的专栏 146
上一篇: Android应用自动添加桌面图标
下一篇: Android学习笔记之AndroidManifest.xml文件解析
cding1818
博客等级 码龄17年 963粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值