Android 第一行代码 第二章 扩展-Activity.finish()与Activity.onDestory()的区别-活动的启动模式

第二章

  • 活动(Activity)主要用于和用户进行交互的包含用户界面的组件。

扩展一、Activity.finish()与Activity.onDestory()的区别

  • 内存上的不同
  1. Activity.onDestory():the system is temporaily destorying this instance of the activity to save space。
    意思就是,系统会很快地摧毁这个活动的实例,以得到空间【就是把这个实际占用的内存当垃圾清理了
  2. Activity.finish(): call this when you activity is done and should be closed.[only stop and destory this activity,application still staying backgound(chek by hold HOME button)。
    当你这个活动应该被关闭的时候使用这个方法,只暂停和摧毁这个方法,但是应用仍然在你后台里【还没清除空间】,长按HOME键还能看到这个应用
  • 声明范围上的不同
  1. onDestory()是protected声明
  2. finish()是public 声明
  • 能否想上一个Activity返回参数不同
  1. onDestory: Note: do not count on this method being called as a place for saving data! For example, if an activity is editing data in a content provider, those edits should be committed in either onPause() or onSaveInstanceState(Bundle) , not here. This method is usually implemented to free resources like threads that are associated with an activity, so that a destroyed activity does not leave such things around while the rest of its application is still running. There are situations where the system will simply kill the activity’s hosting process without calling this method (or any others) in it, so it should not be used to do things that are intended to remain around after the process goes away.
    就不完全翻译了,意思就是,当有参数要返回时,不要用这个方法,要用上面两个斜体加粗的方法,这个方法主要作用是free resources;最后一句说明,会有这种情况:即使没有调用onDestory方法,系统也有可能会杀死这个活动【大概是内存不足?】,所以注意不要在系统杀死这个进程之后再调用这个方法【辨别此活动有没有被杀死的方法之一就是用isFinish()】。
  2. Finish: Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().
    调用这个方法后,将会通过 onActivityResult()方法将ActivityResult返回启动该层Activity的Activity。
  • 派生(或者说类似)方法:
  1. onDestory()方法有许多有关联的方法:
    onPause()
    onStop()
    finish()
    isFinishing()
    在此就不一一描述,详情可以看官网给的说明.,不懂就用词典翻译好了

8.finish()相比来说多了不少派生方法,
在这里插入图片描述

不懂继续翻译器翻译。finish-API.

  • 小结: 如果上层是用startActivityForResult()方法来启动当前活动时,应该用finish()方法,但是在用finish()方法之前要用intent.putExtra方法存数据,以及setResult方法返回数据,否则没存返回数据岂不是等于做了无用功。如果不需要想上层返回数据,而且内存不够用了,需要销毁内存,就用 onDestory()方法。当然,如果不需要返回数据,也不存在内存不够用的情况,两种随便一种都能用。

扩展二 活动的启动模式

  1. 启动模式一共有四种,分别是standard、singleTop、singleTask和singleInsance,可以在AndroidManifest.xml【书本写了Manifest,我还以为写错了,一看Android studio的确是Manifest,一查,这里应该是清单的意思】中通过给 < activity>标签指定android:launchMode属性来选择启动模式。
  2. 可以只修改某一个活动的启动模式,使得同一个应用不同活动有不同的启动模式。
  • 四种启动模式
  1. standard:可在当前活动启动当前活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
  2. singleTop不能在栈顶启动自己,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例;但是,当活动并未处于栈顶位置时【在栈中间】,这时再启动FirstActivity,还是会创建新的实例的。
  3. singleTask:只能有一个活动,每次启动该活动时,系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在,则直接使用该例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
  4. singleInstance: 这个活动存在于一个单独的返回栈中,说起来有点抽象,这个模式也的确算是比较复杂的一个,建议实战演练,比较能加深对这个模式的理解。我能理解,但也说不清楚;觉得书本上举的例子再经典不过了。

-小结:
其实书上的图片,以及相应的例子都能很好的让人去理解这四种模式,建议多看书。


ps:2.6.1小节,知晓当前是在哪一个活动,里面这种方法真是让人打开眼界,又长知识了。算是代码习惯的一种吧。
当你需要用一个功能的时候,如果这个功能需要用到多个继承相同父类的 不同类中,不需要每个类里面都编写一次代码,只需要写一个类去继承他们的父类,然后再让他们去继承这个功能类,在对应的方法里面加上相应的语句即可!
【那么问题来了,这样做的方法,和-----直接写一个类,然后写个静态方法,当需要用到这个类的时候调用静态方法-----, 有什么区别 ?】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值