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")。