在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功能实现的技术探讨的更多相关文章
-
Android 高仿豌豆荚 一键安装app 功能 实现
以往我们那些应用市场 帮我们安装app的时候 我们都得点确定,当然你如果 root 以后 不用点确定 也能自动安装了,后来豌豆荚 推出了一个功能 非root的手机也能不点确定 直接帮你安装好.(如果 ...
-
Ant搭建 一键生成APP技术 平台
1.博客概要 本文详细介绍了当今流行的一键生成APP技术.介绍了这种设计思想的来源,介绍了国内外的研究背景,并介绍了这个技术体系中的一些实现细节,欢迎各路大神们多提意见.一键生成技术,说的通俗点就是, ...
-
成都app开发:架构一个App需要学会哪些技术呢?
成都亿合科技小编为您分享: 随着APP应用的流行,越来越多的人想自己学习怎么开发APP应用,那架构一个APP需要学些什么技术呢?首先要了解App都有哪些类型,不同的类型适用于哪些需求,用户可以根据自己 ...
-
App引流增长技术:Deeplink(深度链接)技术
移动互联网时代,信息的分享传播无疑是 App 引流增长的关键,与其花费大量精力和成本找渠道.硬推广,不如从细节下手,用最快最简便的方法实现 Deeplink(深度链接)技术,打破信息孤岛.缩短分享路径 ...
-
从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件
转自:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI ...
-
一种简单的实现:Android一键换肤功能
现在的APP开发,通常会提供APP的换肤功能,网上流传的换肤代码和实现手段过于复杂,我把原作者的代码重新整理抽取出来,转换成Eclipse项目,重新整理成正确.可直接运行的项目. 代码运行结果如图. ...
-
ionic 实现双击返回键退出应用功能
ionic 实现双击返回键退出应用功能 keywords cordova,ngcordova,phonegap,ionic,双击,返回键,退出 例子 准备Toast插件,提示用,用户体验好点,不是必须 ...
-
Android Studio 点击两次返回键,退出APP
该功能的实现没有特别复杂,主要在onKeyDown()事件中实现,直接上代码,如下: //第一次点击事件发生的时间 private long mExitTime; /** * 点击两次返回退出app ...
-
Android实现点击两次返回退出APP
Android实现点击两次退出APP 这两天在做一个项目碰到这么个问题,需要主界面点击两次直接退出整个APP而不是返回上一个界面,查找了网上的资料,整合和修改了一下写了这篇博客. 这里我主要以我的项目 ...
随机推荐
-
模拟下载的进度条ProgressBar
作者:堕落的天使 图片效果 activity_main.xml(代码) <RelativeLayout xmlns:android="http://schemas.android.co ...
-
存储过程: 存储过程(stored procedure)有时也称为sproc。存储过程存储于数据库中而不是在单独的文件中,有输入参数、输出参数以及返回值等。
存储过程示例一: 执行存储过程方法一: 执行存储过程方法二: 存储过程可以定义返回值: 修改存储过程: 利用存储过程查找三个表内的信息: 练习: 超市管理系统:表一:门店仓库表 MenDian ...
-
黄聪:PHP解决textarea内容换行存入数据库,如何解析取出不能自动换行
解决办法: <textarea rows="5" style="height: auto;" ><?php //按行分割,然后每行输出后带上一 ...
-
gradle与maven项目相互转化
gradle这几年发展迅猛,github越来越多的项目都开始采用gradle来构建了,但是并不是所有人都对gradle很熟悉,下面的方法可以把gradle转成maven项目,前提gradle项目目录结 ...
-
Oracle-在线重定义操作文档
Oracle-在线重定义操作文档 2015年10月8日 15:51 在线重定义的大致操作流程如下: (1)创建基础表A,如果存在,就不需要操作. (2)创建临时的分区表B. (3)开始重定义,将基表A ...
-
web标准(复习)--5 超链接伪类
今天我们开始学习超链接伪类,包含以下内容和知识点: 链接的四种样式 将链接转换为块状 用css制作按钮 首字下沉 一.超链接的四种样式 超链接可以说是网页发展史上一个伟大的发明,它使得许多页面相互链接 ...
-
POJ 1741 Tree【Tree,点分治】
树上的算法真的很有意思……哈哈. 给一棵边带权树,问两点之间的距离小于等于K的点对有多少个. 将无根树转化成有根树进行观察.满足条件的点对有两种情况:两个点的路径横跨树根,两个点位于同一颗子树中. 如 ...
-
SWUST OJ(1102)
顺序表上数据的划分问题的实现 #include <iostream> #include <cstdlib> using namespace std; int main() { ...
-
MySQL忘记密码怎么修改密码
MySQL的 root 帐号密码默认为空,经常都有修改密码后忘记密码的事.如果忘记了root 帐号密码,那该怎么修改密码呢?这里有一个可行的方法,就是在MySQL安全模式下(跳过权限检查)修改密码的方 ...
-
设计模式之Jdk动态代理
什么是动态代理呢?就是在java的运行过程中,动态的生成的代理类.(为了更熟悉的了解动态代理,你必须先熟悉代理模式,可点击设计模式之代理模式 阅读)我们知道java属于解释型语言,是在运行过程中,寻找 ...