【安卓开发】-合理使用finish() onDestroy() 和System.exit()

前言:

  • 为什么说合理使用,三个方法都是再基础不过的方法了,比如一个大型的项目,当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_onStop

  • B又跳到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
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
8941-Android智能手机编程 第1题. 下面( )智能手机平台是开放源代码的。 A. Android B. Windows Phone C. iOS D. Symbian 第2题. Android智能手机平台是基于( )程序语言来进行应用开发的。 A. C# B. Objective-C C. Java D. Javascript 第3题. 电脑屏幕的尺寸为14寸,对应的dpi为( )。 A. 131 B. 120 C. 1024 D. 100 第4题. Software Development Kit(SDK)是( )。 A. Java开发程序包 B. Android集成开发环境 8941-Android智能手机编程全文共17页,当前为第1页。 C. 8941-Android智能手机编程全文共17页,当前为第1页。 软件开发工具包 D. 虚拟设备 第5题. 如果需要给一个UI的组件设置背景图片,则在Java代码访问到定义的图片资源bg_pic.png的方法是( )。 A. R.color.bg_pic B. R.drawable.bg_pic C. R.string.bg_pic D. drawable.bg_pic 第6题. 在Android项目,在res目录下存放字符串信息的文件是( )。 A. strings.xml B. values.xml C. colors.xml D. const.xml 第7题. 在Activity,( )方法在初始化的时候调用。 A. onCreate() B. onStart() C. onRestart() D. onDestroy() 8941-Android智能手机编程全文共17页,当前为第2页。 8941-Android智能手机编程全文共17页,当前为第2页。 第8题. 在用户自定义的Activity,通过( )方法可以关闭Activity。 A. finish() B. startActivity() C. onStop() D. onDestory() 第9题. 在Java代码,通过( )方式可以访问到配置文件定义的颜色信息。 A. R.color_name_id B. color_name C. R.color.color_name_id D. R.String.color_name_id 第10题. 在res目录下的布局配置文件,通过( )方式可以访问strings.xml定义的字符串常量信息Title。 A. string/title B. @string/title C. title D. String.title 第11题. 在Android有哪几种应用组件类型? 应用组件是Android应用程序的重要基石,每个组件都可以作为独立的实体存在,支持具体的功能实现。 8941-Android智能手机编程全文共17页,当前为第3页。 (1)Activity活动) 8941-Android智能手机编程全文共17页,当前为第3页。 (2)Service(服务) (3)Broadcast Receiver(广播接收者) (4)Content Provider(内容提供者) 第12题. 如何创建虚拟设备? 单击Eclipse工具栏上的图标,打开创建虚拟Android设备的界面,设置各项属性,并填写必填信息后,单击"OK"按钮,就可以在AVD管理器看到新创建的设备。具体如下: (1)打开安卓虚拟设备管理器,即 AVD Manager。点击图的"New..."按钮新建安卓模拟器设备。在下一界面设置安卓模拟器的详细设备参数,包括内存大小等。 (2)打开窗体后,填写 AVD Name,即虚拟器的名称,此为必填项,并且只支持大小写英文、数字、下划线,不能与之前新建的 AVD 名称相同。然后选择 Device,选择适合自己的屏幕大小、分辨率。再选择 Target,即安卓系统版本。若出现 Device、Target 为空或无法选择,包括之前点击"New..."按钮时无效,请执行以下操作: 8941-Android智能手机编程全文共17页,当前为第4页。 8941-Android智能手机编程全文共17页,当前为第4页。 打开 SDK Manager; 勾选自己需要安装的项目,图仅为举例,点击"Install [n] packages"开始安装勾选,安装完成后会提示"Installed"(已安装); 安装或更新完成 Packages(安卓系统版本包)后,便可继续新建虚拟器。 (3)勾选" Keyboard "、" Skin ",选择前置摄像头" Front Camera "为 Webcam0(会调用电脑摄像头)。后置摄像头" Back Camera "为任意一项

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值