【安卓开发】-合理使用finish() onDestroy() 和System.exit()
来源:互联网 发布:大容量文件上传php 编辑:程序博客网 时间:2024/05/17 05:58
前言:
为什么说合理使用,三个方法都是再基础不过的方法了,比如一个大型的项目,当onDestroy()中有太多和服务相关的操作(而且多方App共用一个服务,开启了同样的一个Activity),想停止当前App但是又不想影响其他长得一样的Activity和停止服务,此时finish掉都不合适,而且finih并未直接执行onDestroy,当其他App又开启才执行。导致一系列问题,所以有必要细心一些。
其实三个方法都是大家刚接触Android时遇到的简单的方法,只不过在实际项目开发中,细节方面差异还是需要注意的,好吧,下面直接讲解关于他们的区别:
区别:
finish()
- 原意:
Call this when your activity is done and should be closed. - 翻译:
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。 - 原理:
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。
onDestory()
- 原意:
the system is temporarily destroying this instance of the activity to save space. - 翻译:
系统销毁了这个Activity的实例在内存中占据的空间。 - 原理:
在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。
System.exit(0)
- 原理:
退出整个应用程序的,是针对整个Application的。将整个进程关闭(除服务外)。
拓展
- finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。安卓系统自己决定何时从内存中释放应用程序。当系统没有可用内存到时候,会按照优先级,释放部分应用。
今天在公司ROM项目的录音机项目开发中,因UE需要更改需求,为了保证短信调用录音机的风格的差异,所以做不同的处理。
情景:
- 1.普通录制,短信录制共用的是同一个服务。
- 2.录制一个的时候,另一个保存。
- 3.短信中录制,如果不可见,就保存,用户再次进来看到的将只会是空白的短信界面(同米5处理策略)。
- 4.普通录制->短信录制->开启页面就保存。
使用:
用过finish,试过onDestroy中处理逻辑,但最终为了保证只是关闭程序(短信和普通录制保持各自单一),所以不执行onDestroy(里边包含自己的太多逻辑),所以直接Sytem.exit().
附大家都会的小流程:
AB两界面,都有跳到彼此的按钮,启动模式为标准模式:
情况1:A按钮跳到到B,B跳到A界面
A界面显示:
A_onCreate->A_onStart->A_onResume跳到B界面并显示(onPause和OnStop 包首尾):
A_onPause->B_onCreate->B_onStart->B_onResume->A_onStopB又跳到A界面(onPause和OnStop 包首尾)::
B_onPause->A_onCreate->A_onStart->A_onResume->B_onStop
情况1:A按钮跳到到B,B界面直接back键位
- 前两阶段一致
- 第三阶段(onPause和OnStop ,onDestroy 包首尾 ,因为是返回所以是 Restart):
B_onPause->A_onRestart->A_onStart->A_onResume->B_onStop->B_onDestroy
0 0
- 【安卓开发】-合理使用finish() onDestroy() 和System.exit()
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
- 使用WebRTC搭建前端视频聊天室——入门篇
- 数据结构——线索二叉树
- 【节日快乐】圣诞元旦在即,你准备好怎么营销了吗?
- ORACLE里锁有以下几种模式,v$locked_object,locked_mode
- leetcode-98. Validate Binary Search Tree
- 【安卓开发】-合理使用finish() onDestroy() 和System.exit()
- 随着产品正式发布上市,Azure物联网中心的设备管理能力将得到极大的提升
- java定时器的几种用法
- SD-关于定价日期的设置
- tcpdump抓包
- 1622-5 孔富晨 总结《2016年12月22日》 【连续第83天总结】
- 黑洞数
- 查看处于被锁状态的表:v$locked_object dba_objects v$session all_objects v$sqlarea v$lock
- 2017年5月21、22日r-u-a-n-k-a-o整理