第1章:Activity生命周期和启动模式


1.onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。

2.onPause必须先执行完,新Activity的onResume才会执行。

3.onStart和onStop是从Activity是否可见这个角度来回调的,而onResume和onPause是从Activity是否位于前台这个角度来回调的。

4.onPause和onStop都不能执行耗时的操作,尤其是onPause,这也意味着,我们应当尽量在onStop中做操作,从而使得新Activity尽快显示出来并切换到前台。


5.关于保存和恢复View层次结构,系统的工作流程是这样的:首先Activity被意外终止时,Activity会调用onSaveInstanceState去保存数据,然后Activity会委托Window去保存数据,接着Window再委托它上面的顶级容器去保存数据。

6.从TextView的onSaveInstanceState方法源码中可以容易地看出,TextView保存了自己的文本选中状态和文本内容,并且通过查看其onRestoreInstanceState方法的源码,可以发现它的确恢复了这些数据。

7.onRestoreInstanceState一旦被调用,其参数Bundle savedInstanceState一定是有值的,我们不用额外地判断是否为空;但是onCreate不行,onCreate如果是正常启动的话,其参数Bundle savedInstanceState为null,所以必须要额外判断。

8.系统只在Activity异常终止的时候才会调用onSaveInstanceState和onRestoreInstanceState来存储和恢复数据,其他情况不会触发这个过程。但是按Home键或者启动新Activity仍然会单独触发onSaveInstanceState的调用。

9.当系统内存不足时,系统会按照:后台Activity、可见但非前台Activity、前台Activity 的顺序去杀死目标Activity所在的进程,并在后续通过onSaveInstanceState和onRestoreInstanceState来存储和恢复数据。因此,一些后台工作不适合脱离四大组件而单独运行在后台中,这样进程很容易被杀死。

10.如果当某项内容发生改变后,我们不想系统重新创建Activity,可以在manifest文件中给Activity指定configChanges属性。

11.Activity的LaunchMode:(1)standard(标准模式):谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在栈中。(2)singleTop(栈顶复用模式)。(3)singleTask(栈内复用模式):如果存在A所需的任务栈,这时要看A是否在栈中有实例存在,如果有实例存在,那么系统就会把A调到栈顶并调用它的onNewIntent方法,如果实例不存在,就创建A的实例并把A压入栈中。singleTask默认具有clearTop的效果,会导致栈内所有在D上面的Activity全部出栈。(4)singleInstance(单实例模式):这是一种加强的singleTask模式,它除了具有singleTask模式的所有特性外,还加强了一点,那就是具有此种模式的Activity只能单独地位于一个任务栈中。

12.启动Activity分为两种,显式调用和隐式调用。隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息,如果不匹配将无法启动目标Activity。IntentFilter中的过滤信息有action、category、data。<intent-filter><action android:name="xxx"/><category android:name="xxx"/><data android:mimeType="text/plain"/></intent-filter>。

13.只有一个Intent同时匹配action类别、category类别、data类别才算完全匹配,只有完全匹配才能成功启动目标Activity。一个Activity中可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成功启动对应的Activity。

14.action的匹配要求Intent中的action存在且必须和过滤规则中的其中一个action相同。Intent中如果出现了category,不管有几个category,对于每个category来说,它必须是过滤规则中已经定义了的category。当然,Intent中可以没有category,如果没有category的话,按照上面的描述,这个Intent仍然可以匹配成功。系统在调用startActivity或者startActivityForResult的时候会默认认为Intent加上"android.intent.category.DEFAULT"这个category。

15.data由两部分组成,mimeType和URI。mimeType指媒体类型,如image/jpeg、audio/mpeg4-generic和video/*等。URI的结构是:scheme://host:port/path,如content://com.example.project:200/folder/subfolder/etc。intent.setDataAndType(Uri.parse("file://abc"),"image/png")。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzyjr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值