安全退出app,activoty栈管理
2023-09-14 08:58:19 时间
由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来发现有做个记录和总结的必要,就写了这篇博文。(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案,并加上一个DEMO便于大家了解大体流程)
在android的用户交互中,按钮触发的意图(Intent)跳转会为你重新打开新的一个界面活动(Activity),对于之前的界面根据需求进行摧毁(Finish())或则保留。
如果一个交互流程中,是从A开始,按照A - B - C - D - A这样的顺序进行的话,那么B,C,D这3个活动界面会根据你D中最后的操作来进行保留或是摧毁,例如
(1)注册流程中,在A界面点击注册,通过B,C,D界面完成注册后,B,C,D就随之摧毁,而如果D中注册不成功没跳转会A的话,那么B,C,D就不能摧毁,之前所填的内容也必须保留。
(2)客户端交互中,返回首页按钮,由于在频繁的点击打开过多的界面(如微信查看朋友圈),返回首页就必须一个一个back回去,所有有的客户端为了优化用户体验,便会加入一个按钮返回首页(之前打开的全部关闭)。
以上几个例子都涉及到了 --- 如何安全退出多个ACTIVITY 这个问题。
其实,这个问题的解决方案有好多种,并且各有各的优缺点,下面就罗列出多个方案以及各个方案的优缺点所在,以便用户根据需求选择。
知识结构
首先,通过大致的思维导图罗列出了以下几个知识点,来帮助你去分析学习:
1.Activity的启动模式
2.intent: Flags属性,以及其显、隐式 3.Application : 全局的使用 4.Activity: onActivityResult(int requestCode, int resultCode, Intent data)方法 5.栈的概念:Last-In/First-Out(LIFO) --- 后进先出的原则 6.BroadcastReceiver 广播
7.栈的引申的知识点:(1)ArrayList和LinkedList的区别 (2)android 栈和队列
以上的 (1)Activity的启动模式 (2)intent: Flags属性 (3)栈的概念 我通过一篇文章写明了他们3者的联系可以点击以下链接查看 Activity启动模式 及 Intent Flags 与 栈 的关联分析
具体方案 方案1
方法:采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序(多activity) 思路:通过Intent的Flags来控制堆栈去解决 android中,每打开一个Activity,便会在栈中加入一个Activity,当该Activity被摧毁后,栈中便移除了它,并且栈中的Activity是按照开打的先后顺序依次排排列的。 Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标 志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
代码: 在注册流程最后的FourthStep.class中,点击完成注册点击事件
之后在注册流程中的对应步骤的Activity的onCreate()中把当前Activity推入栈列表,完成注册流程后,弹出栈列表中流程所涉及的Activity。
优缺点: 缺:如果处理不当,容易造成不在当前界面的Activity被全局引用而摧毁不掉,内存得不到释放,从而无故占用不必要的内存。
方案3:
方法:全局记录打开的Activity或通过一个自定义的类去管理打开的Activity 思路:通过在Application中用一个列表来记录当前所打开的Activity,根据需求去遍历finish()。 描述:和方案2有点类似。
代码:
缺:如果处理不当,容易造成不在当前界面的Activity被全局引用而摧毁不掉,内存得不到释放,从而无故占用不必要的内存。
方案4 方法:使用广播机制解决 思路:通过Activity创建的时候,设置监听广播,在注册流程最后步完成注册时候,发送广播进行遍历finish(). 描述:这里我把这些广播的初始化都写在了基类BaseActivity里面,便于维护。
代码:
方法:通过Activity跳转中传递requestCode的之后根据onActivityResult(int requestCode, int resultCode, Intent data)中返回的resultCode遍历关闭Activity 思路:使用startActivityForResult(intent, requestCode)方法跳转,并且通过 描述:这里我把这些广播的初始化都写在了基类BaseActivity里面便于查看。
代码:
startActivityForResult(new Intent(getApplicationContext(), SecondStep.class),FINISH_REQUESTCODE);
方法:方法有人说可以使用抛出异常来退出,可是这样会影响到用户体验,所以不推荐
总结 以上便是我从注册流程分析如何安全退出多个ACTIVITY 的汇总总结,综上所述,博主觉得方案1是最可行的方法,如有什么错误之处,望大家提出,马上改正。
源码DEMO![](http://img.blog.csdn.net/20140511214716515?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmlwemp5bm8x/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
最后附上源码:下载地址 (以上方式中都已经讲到了对应的方法和代码,源码可以更好的帮助你去体验下这几种方式的使用流程)
站酷云 : APP Engine + 云原生 + CICD + 中间件管理 + 服务网格 App Engine本身不是技术手段,它是一个PAAS平台,至于底层用K8s还是虚拟机、serverless还是微服务,其实都是可以的,这个概念可以越来越老,但是它简化开发者的入门门槛,通过简单的勾选即可生成一个应用,这个思想,值得PAAS平台们借鉴。
智慧党建系统开发app,组织部干部管理信息化平台建设 智慧党建系统将互联网、大数据等新兴信息技术与基层党建工作难题相结合起来,为党组织打造一款高质量、高标准的新型党务系统,为党务工作者打造功能全面、分工细致、受外界因素影响小的“好助手”,让繁杂的基层党建工作不再是困扰在党务工作者心头上的“重担”。
智慧党建管理平台建设app,组织部党员系统开发 智慧党建管理平台建设是新时期党建工作改革创新的重要体现,该平台针对各领域基层党建的实际需求,从党风、党务、党纪三方面着手,建设党务平台、组织平台、考核平台、活动平台、学习平台等八大模块,覆盖了党建工作的方方面面,真正做到了网络发展到哪,党建工作就覆盖到哪里!
智慧党建信息化管理平台建设,党员积分系统开发app 智慧党建信息化管理平台的建设为基层党组织提供管理、学习、活动、监督、考核等功能于一体的信息化应用平台,通过优化工作流程、统一标准、整合资源等方式,使党建工作向数字化、信息化方向转变。
基于ECS搭建的应用示例(博客、密码管理、同学地图、APP服务端等)详解之一 作为互联网行业从业者,头脑里总是会冒出各种各样的想法,当然可以用网络笔记、云盘甚至本地的方式等记录下自己的想法,然而如果想要落地尝试,则拥有一台自己的服务器就再好不过了。全栈开发已经讲了很久了,如果是前端,通过nodejs也可以搭建后端服务;如果是后端,通过flutter、uniapp等也可以搭建出各种端上的APP;如果非研发人员,通过低代码开发平台拖拽也可以。有了自己的产品之后,如果不满足于本地跑跑,那么就得面临选择应用的载体了,性价比最高的方式是选择云上ECS,下面拿我的几年使用经验来展开讲一下。
智慧党建综合管理平台建设app,组织部党建信息管理系统开发 智慧党建综合管理平台将互联网+、大数据等新技术与传统党建工作相结合,为党组织单位构建新型智慧党建管理平台、业务、服务全覆盖,为基层党建组织提供宣传、工作、学习、活动、交流为一体的数据应用平台,对基层党建工作实现智能化分析。
使用APICloud AVM框架开发人事档案管理助手app实战 由于人事档案具有涉密性,所以本应用没有使用后台服务,全部功能都在APP本地实现。开发工具采用 APICloud Studio3,基于VSCode的(PS:比基于Atom的autio2好用太多)。
在android的用户交互中,按钮触发的意图(Intent)跳转会为你重新打开新的一个界面活动(Activity),对于之前的界面根据需求进行摧毁(Finish())或则保留。
如果一个交互流程中,是从A开始,按照A - B - C - D - A这样的顺序进行的话,那么B,C,D这3个活动界面会根据你D中最后的操作来进行保留或是摧毁,例如
(1)注册流程中,在A界面点击注册,通过B,C,D界面完成注册后,B,C,D就随之摧毁,而如果D中注册不成功没跳转会A的话,那么B,C,D就不能摧毁,之前所填的内容也必须保留。
(2)客户端交互中,返回首页按钮,由于在频繁的点击打开过多的界面(如微信查看朋友圈),返回首页就必须一个一个back回去,所有有的客户端为了优化用户体验,便会加入一个按钮返回首页(之前打开的全部关闭)。
以上几个例子都涉及到了 --- 如何安全退出多个ACTIVITY 这个问题。
其实,这个问题的解决方案有好多种,并且各有各的优缺点,下面就罗列出多个方案以及各个方案的优缺点所在,以便用户根据需求选择。
知识结构
首先,通过大致的思维导图罗列出了以下几个知识点,来帮助你去分析学习:
1.Activity的启动模式
2.intent: Flags属性,以及其显、隐式 3.Application : 全局的使用 4.Activity: onActivityResult(int requestCode, int resultCode, Intent data)方法 5.栈的概念:Last-In/First-Out(LIFO) --- 后进先出的原则 6.BroadcastReceiver 广播
7.栈的引申的知识点:(1)ArrayList和LinkedList的区别 (2)android 栈和队列
以上的 (1)Activity的启动模式 (2)intent: Flags属性 (3)栈的概念 我通过一篇文章写明了他们3者的联系可以点击以下链接查看 Activity启动模式 及 Intent Flags 与 栈 的关联分析
具体方案 方案1
方法:采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序(多activity) 思路:通过Intent的Flags来控制堆栈去解决 android中,每打开一个Activity,便会在栈中加入一个Activity,当该Activity被摧毁后,栈中便移除了它,并且栈中的Activity是按照开打的先后顺序依次排排列的。 Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标 志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
代码: 在注册流程最后的FourthStep.class中,点击完成注册点击事件
之后在注册流程中的对应步骤的Activity的onCreate()中把当前Activity推入栈列表,完成注册流程后,弹出栈列表中流程所涉及的Activity。
优缺点: 缺:如果处理不当,容易造成不在当前界面的Activity被全局引用而摧毁不掉,内存得不到释放,从而无故占用不必要的内存。
方案3:
方法:全局记录打开的Activity或通过一个自定义的类去管理打开的Activity 思路:通过在Application中用一个列表来记录当前所打开的Activity,根据需求去遍历finish()。 描述:和方案2有点类似。
代码:
缺:如果处理不当,容易造成不在当前界面的Activity被全局引用而摧毁不掉,内存得不到释放,从而无故占用不必要的内存。
方案4 方法:使用广播机制解决 思路:通过Activity创建的时候,设置监听广播,在注册流程最后步完成注册时候,发送广播进行遍历finish(). 描述:这里我把这些广播的初始化都写在了基类BaseActivity里面,便于维护。
代码:
方法:通过Activity跳转中传递requestCode的之后根据onActivityResult(int requestCode, int resultCode, Intent data)中返回的resultCode遍历关闭Activity 思路:使用startActivityForResult(intent, requestCode)方法跳转,并且通过 描述:这里我把这些广播的初始化都写在了基类BaseActivity里面便于查看。
代码:
startActivityForResult(new Intent(getApplicationContext(), SecondStep.class),FINISH_REQUESTCODE);
方法:方法有人说可以使用抛出异常来退出,可是这样会影响到用户体验,所以不推荐
总结 以上便是我从注册流程分析如何安全退出多个ACTIVITY 的汇总总结,综上所述,博主觉得方案1是最可行的方法,如有什么错误之处,望大家提出,马上改正。
源码DEMO
最后附上源码:下载地址 (以上方式中都已经讲到了对应的方法和代码,源码可以更好的帮助你去体验下这几种方式的使用流程)
站酷云 : APP Engine + 云原生 + CICD + 中间件管理 + 服务网格 App Engine本身不是技术手段,它是一个PAAS平台,至于底层用K8s还是虚拟机、serverless还是微服务,其实都是可以的,这个概念可以越来越老,但是它简化开发者的入门门槛,通过简单的勾选即可生成一个应用,这个思想,值得PAAS平台们借鉴。
智慧党建系统开发app,组织部干部管理信息化平台建设 智慧党建系统将互联网、大数据等新兴信息技术与基层党建工作难题相结合起来,为党组织打造一款高质量、高标准的新型党务系统,为党务工作者打造功能全面、分工细致、受外界因素影响小的“好助手”,让繁杂的基层党建工作不再是困扰在党务工作者心头上的“重担”。
智慧党建管理平台建设app,组织部党员系统开发 智慧党建管理平台建设是新时期党建工作改革创新的重要体现,该平台针对各领域基层党建的实际需求,从党风、党务、党纪三方面着手,建设党务平台、组织平台、考核平台、活动平台、学习平台等八大模块,覆盖了党建工作的方方面面,真正做到了网络发展到哪,党建工作就覆盖到哪里!
智慧党建信息化管理平台建设,党员积分系统开发app 智慧党建信息化管理平台的建设为基层党组织提供管理、学习、活动、监督、考核等功能于一体的信息化应用平台,通过优化工作流程、统一标准、整合资源等方式,使党建工作向数字化、信息化方向转变。
基于ECS搭建的应用示例(博客、密码管理、同学地图、APP服务端等)详解之一 作为互联网行业从业者,头脑里总是会冒出各种各样的想法,当然可以用网络笔记、云盘甚至本地的方式等记录下自己的想法,然而如果想要落地尝试,则拥有一台自己的服务器就再好不过了。全栈开发已经讲了很久了,如果是前端,通过nodejs也可以搭建后端服务;如果是后端,通过flutter、uniapp等也可以搭建出各种端上的APP;如果非研发人员,通过低代码开发平台拖拽也可以。有了自己的产品之后,如果不满足于本地跑跑,那么就得面临选择应用的载体了,性价比最高的方式是选择云上ECS,下面拿我的几年使用经验来展开讲一下。
智慧党建综合管理平台建设app,组织部党建信息管理系统开发 智慧党建综合管理平台将互联网+、大数据等新技术与传统党建工作相结合,为党组织单位构建新型智慧党建管理平台、业务、服务全覆盖,为基层党建组织提供宣传、工作、学习、活动、交流为一体的数据应用平台,对基层党建工作实现智能化分析。
使用APICloud AVM框架开发人事档案管理助手app实战 由于人事档案具有涉密性,所以本应用没有使用后台服务,全部功能都在APP本地实现。开发工具采用 APICloud Studio3,基于VSCode的(PS:比基于Atom的autio2好用太多)。
相关文章
- Android实例-调用系统APP(XE10+小米2)
- [Angular] Upgrade existing Angular app to Progressive Web App
- uni-app:运行到微信小程序模拟器(hbuilderx 3.6.18)
- [AFUI] App Framework Plugins
- App Thinning(为什么苹果app上传时的包比在appStore下载下来的包大很多)
- Android 10.0 Launcher3的workspace的app的名称分两行显示(BubbleTextView 两行显示)
- 个人或者企业怎么进行app开发?开发一款APP应用大概须要多少钱?
- Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术——不就是chrome OS吗?
- 移动APP安全测试
- lumen 5.6 设置APP_KEY为32位长的随机字符串
- Android 10.0 无源码app修改它的icon图标