android app 退出功能,Android 完美退出 App (Exit)

android app 退出功能,Android 完美退出 App (Exit)最近两天为了解决Android上面退出程序问题折腾了半死,在google&baidu上面找了很久、很久出来的完全千篇一律,说的方法有三,但是经过我试验后全部不行。三个方法分别是:killProcess,这种方式当你kill后Activity会返回到上一个ActivityAndroidLevel8(包含8)前使用一个API来操作,Level8以后又是另外一种,所以不能通用使用…

大家好,又见面了,我是你们的朋友全栈君。

最近两天为了解决Android上面退出程序问题折腾了半死,在google & baidu 上面找了很久、很久出来的完全千篇一律,说的方法有三,但是经过我试验后全部不行。

三个方法分别是:

killProcess, 这种方式当你kill后 Activity 会返回到上一个Activity

Android Level 8(包含8)前使用一个API来操作,Level8以后又是另外一种,所以不能通用

使用 FLAG_ACTIVITY_CLEAR_TOP,从 A 到 B

下面介绍自己的方式:

大家都知道 Android 的 Activity 是存着历史栈的,比如从 A -> B -> C,C 完成 finish 后回到 B,把所有的Activity 都 finish了,程序就自然退出了。 当然在 finish 的同时也需要是否自己程序的其他资源。所以需要想个办法把 Activity 给存起来。然后在程序退出的地方调用它们的 finish()方法。

使用全局变量。对了,第一个想到的就是继承 Application,代码入下。

public class AgentApplication extends Application {

private List activities = new ArrayList();

public void addActivity(Activity activity) {

activities.add(activity);

}

@Override

public void onTerminate() {

super.onTerminate();

for (Activity activity : activities) {

activity.finish();

}

onDestroy();

System.exit(0);

}

}

然后在 Activity  onCreate 的时候来调用  addActivity (),有人可能想到这个Application需要在所有的 Activity  onCreate的时候都使用,需要做一个单例实例。其实根本不需要。在 Activity 中使用  this.getApplication() 就可以了。

最后在你需要推出程序的地方调用 application.onTerminate() 就可以了。记住:super.onTerminate() 必须调用,代码中的 onDestroy()是我自己的释放其他资源的方法,不是系统的。

运行以上代码后,在LogCat 中会出现一行提示:

Process  包名 (pid  xxxxx)  has died.  证明你的程序退出了。现在你可以测试了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160722.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • VMWare虚拟机桥接模式下设置静态IP实现上网

    VMWare虚拟机桥接模式下设置静态IP实现上网一、虚拟机设置:1.1虚拟机===》设置 1.2选择网络适配器===》桥接模式二、虚拟机网络设置2.1编辑===》虚拟网络编辑器2.2三、设置静态IP3.1 查看我们的PC无线网的默认网关是多少,虚拟机的IP以及网关设置必须与PC无线网网关在同一个网段内才能实现通信3.2修改ifcfg-eth0,注:文件名可能不一样,我的是:ifcf…

  • route命令的使用详解[通俗易懂]

    route命令的使用详解[通俗易懂]Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table)。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设…

  • Java8 Stream使用flatMap合并List

    Java8 Stream使用flatMap合并List之前也写过很多篇关于Java8使用的文章了,但是回顾一下,好像还没介绍过Java8Stream的flatMap操作,昨天刚好在工作中遇到一个场景,发现flatMap简直太方便了,这里总结一下flatMap的常规使用。附带讲一下,使用Java8实现集合的并、交、差操作,其实之前也讲过一种使用Guava的实现方式,具体请参考Guava集合工具 flatMap 首先看一下一种场景,存在一个M…

  • 数据结构-栈和队列

    数据结构-栈和队列1.栈1.1栈的定义栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:结论:后进先出(LastInFirstOut),简称为LIFO线性表。栈的基本运算有六种:构造空栈:InitStack(S)、判栈空:StackEmpty(S)、判栈满:StackFull(S)、进栈:Push(S,x

  • php socket 发送HTTP请求 POST json

    php socket 发送HTTP请求 POST json

  • 马哥学习—-李洋个人笔记—-ansible学习心得

    马哥学习—-李洋个人笔记—-ansible学习心得

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号