【安卓开发】-合理使用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

你可能感兴趣的:(Android)