在Android的开发过程中,会经常存在“一键退出APP”的需求。经过一段时间的整理,其主要实现方式有以下几种。

本质:一键结束当前APP的所有activity&一键结束当前APP进程,两者合二为一才是真的结束。

一、一键结束当前APP的所有activity的实现方式:

  1. 通过Android组件:activity

    (采用activity启动模式:singletask)

    优点:使用简单&方便

    缺点:

      (1)规定APP的入口activity采用singletask启动模式

      (2)使用范围局限:只能结束当前任务栈的activity,若出现多任务栈则无法处理。

    (采用activity启动标记位)

    优点:使用简单方便

    缺点:使用范围局限,只能结束当前任务栈的activity,若出现多任务栈则无法处理。

    (通过系统任务栈,通过activitymanager获取当前系统的任务栈&将栈内所有activity逐个退出)

  2. 通过Android组件broadcastreceiver(在每个activity里注册广播接收器(相应动作==关闭自身);当需要退出APP的时候,发送广播请求即可)

  优点:应用场景广泛:兼顾单/多任务栈&多启动模式状况

  缺点:实现复杂,需要在每个activity里注册广播接收器。

 

  3. 自身实现

    (创建链表,就是通过在application子类中建立一个activity链表;保存正在运行的activity实例;当需要一键退出APP时把链表中所有activity逐个退出即可。)

    优点:应用场景广泛,兼顾单/多任务栈&多启动模式的情况

    缺点:需要activity经历正常的生命周期,即创建时调用onCreate(),结束时调用onDestroy())

    (RxBus,使用rxbus当作事件总栈,在每个activity里注册rxbus订阅(响应动作==关闭自身);当需要退出APP的时候,发送退出事件请求即可)

    优点:可与RxJava结合

    缺点:实现复杂

二、一键结束当前APP进程的实现方式:

  (采用dalvik本地方法),即在步骤一结束当前APP结束APP所有的activity后调用该方法即可一键退出APP)

对于一键退出APP功能实现的技术探讨的更多相关文章

  1. Android 高仿豌豆荚 一键安装app 功能 实现

    以往我们那些应用市场 帮我们安装app的时候  我们都得点确定,当然你如果 root 以后 不用点确定 也能自动安装了,后来豌豆荚 推出了一个功能 非root的手机也能不点确定 直接帮你安装好.(如果 ...

  2. Ant搭建 一键生成APP技术 平台

    1.博客概要 本文详细介绍了当今流行的一键生成APP技术.介绍了这种设计思想的来源,介绍了国内外的研究背景,并介绍了这个技术体系中的一些实现细节,欢迎各路大神们多提意见.一键生成技术,说的通俗点就是, ...

  3. 成都app开发:架构一个App需要学会哪些技术呢?

    成都亿合科技小编为您分享: 随着APP应用的流行,越来越多的人想自己学习怎么开发APP应用,那架构一个APP需要学些什么技术呢?首先要了解App都有哪些类型,不同的类型适用于哪些需求,用户可以根据自己 ...

  4. App引流增长技术:Deeplink(深度链接)技术

    移动互联网时代,信息的分享传播无疑是 App 引流增长的关键,与其花费大量精力和成本找渠道.硬推广,不如从细节下手,用最快最简便的方法实现 Deeplink(深度链接)技术,打破信息孤岛.缩短分享路径 ...

  5. 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件

    转自:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI ...

  6. 一种简单的实现:Android一键换肤功能

    现在的APP开发,通常会提供APP的换肤功能,网上流传的换肤代码和实现手段过于复杂,我把原作者的代码重新整理抽取出来,转换成Eclipse项目,重新整理成正确.可直接运行的项目. 代码运行结果如图. ...

  7. ionic 实现双击返回键退出应用功能

    ionic 实现双击返回键退出应用功能 keywords cordova,ngcordova,phonegap,ionic,双击,返回键,退出 例子 准备Toast插件,提示用,用户体验好点,不是必须 ...

  8. Android Studio 点击两次返回键,退出APP

    该功能的实现没有特别复杂,主要在onKeyDown()事件中实现,直接上代码,如下: //第一次点击事件发生的时间 private long mExitTime; /** * 点击两次返回退出app ...

  9. Android实现点击两次返回退出APP

    Android实现点击两次退出APP 这两天在做一个项目碰到这么个问题,需要主界面点击两次直接退出整个APP而不是返回上一个界面,查找了网上的资料,整合和修改了一下写了这篇博客. 这里我主要以我的项目 ...

随机推荐

  1. pwn的一些技巧与总结

    原文地址:https://github.com/Naetw/CTF-pwn-tips 目录 溢出 在gdb中寻找字符串 二进制服务 找到libc中特定函数的偏移地址 Find '/bin/sh' or ...

  2. 01.基础架构:一条SQL查询语句是如何执行的?学习记录

    01.基础架构:一条SQL查询语句是如何执行的?学习记录http://naotu.baidu.com/file/1c8fb5a0f2497c3a2655fed89099cb96?token=ff25d ...

  3. elasticsearch相关聚合查询示例

    索引(index):logstash-nginx-*,type:nginx_access 请求路径: 1.按照某个字段进行分组统计访问量 { "query": { "bo ...

  4. java8 Stream2

    new Thread(() -> System.out.println("lambda表达式,取代匿名函数......")).start(); Stream.of(" ...

  5. Go 数组(1)

    1.一旦声明,数组里存储的数据类型和数组长度就都不能改变了.如果需要存储更多的元素, 就需要先创建一个更长的数组,再把原来数组里的值复制到新数组里. 例如: ]int 2.使用数组字面量声明数组 // ...

  6. 第03章 AOP前奏

    第03章 AOP前奏 提出问题 ●情景:数学计算器 ●要求 ①执行加减乘除运算 ②日志:在程序执行期间追踪正在发生的活动 ③验证:希望计算器只能处理正数的运算 ●常规实现 ●问题 ○代码混乱:越来越多 ...

  7. Es学习第十一课,使用java操作elasticsearch

    前面十节课我们已经把ES的基本概念和使用讲的差不多了,现在我们就用基于java来实际开发一个操作ES的小项目,带大家来一起练练手. 1.我们用IDEA创建一个maven项目 项目结构如上图所示,然后我 ...

  8. 如何防御DNS陷阱?黑客常用3种DNS欺骗手法

    DNS如何被利用?那么这个系统如何让用户变得脆弱?通常解析器会告诉每个DNS服务器你正在寻找哪个域名.此请求有时会包含您的完整IP地址.或者,如果不是您的完整IP地址,请求中通常会包含您的大部分IP地 ...

  9. 数学相关【真·NOIP】

    数论相关 上来就不会的gcd相关.见SCB他威胁我去掉了一个后缀的blog好了:https://blog.csdn.net/suncongbo/article/details/82935140(已经过 ...

  10. excel VBA 编程

    Dim cuttent_columns As Integer Dim care_repeat As Integer Private Sub Workbook_Open() Dim i As Integ ...