第一章、Activity 的生命周期和启动模式

Activity 的生命周期和启动模式

先上一张图解析生命周期过程的一张经典图
第一章、Activity 的生命周期和启动模式_第1张图片
提示:
1、configuration 当设备配置发生改变时候Activity会被重新创建
解决方法:在Activity中指定configChanges属性,常用的有locale、orientation、keyboardHidden这三个选项,还可能用到screenSize。我们只要在AndroidMenifest.xml中加入Activity的声明就解决了配置改变引起的activity重建问题。
2、新Activity是透明主题时,旧Activity不会走onStop;
3、Activity切换时,旧Activity的onPause会先执行,然后才会启动新的Activity;
4、Activity在异常情况下被回收时,onSaveInstanceState方法会被回调,回调时机是在onStop之前,当Activity被重新创建的时 候,onRestoreInstanceState方法会被回调,时序在onStart之后;
5、标识Activity任务栈名称的属性:TaskAffinity,默认为应用包名。

Activity的LaunchMode

1、standard 系统默认。每次启动会重新创建新的实例,谁启动了这个Activity,这个Activity就在谁的栈里。
细节:当我们用ApplicationContext去启动standard模式的Activity的时候就会报错,这是因为standard模式的Activity默认会进入启动它的Activity所属的任务栈中,但是由于非Activity类型的Context(如 ApplicationContext)并没有所谓的任务栈,所以就会出问题,解决这个问题只需要为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标志位即可。
2、singleTop 栈顶复用模式。该Activity的onNewIntent方法会被回调,onCreate和onStart并不会被调用。
3、singleTask 栈内复用模式。只要该Activity在一个栈中存在,都不会重新创建,onNewIntent会被回调。如果不存在,系统会先寻找是否存在需要的栈,如果不存在该栈,就创建一个任务栈,然后把这个Activity放进去;如果存在,就会创建到已经存在的这个栈中。
4、singleInstance。具有此种模式的Activity只能单独存在于一个任务栈。

IntentFilter匹配规则。

1、action匹配规则:要求intent中的action 存在 且 必须和过滤规则中的其中一个相同 区分大小写;
2、category匹配规则:系统会默认加上一个android.intent.category.DEAFAULT,所以intent中可以不存在category,但如果存在就必须匹配其中一个;
3、data匹配规则:data由两部分组成,mimeType和URI,要求和action相似。如果没有指定URI,URI但默认值为content和file(schema)
4、其中URI(://:/[ | | ])里面又包括:
(1)Scheme:URI的模式,比如http、file、content,如果URI中没有Scheme,则URI其他参数无效,URI也是无效的。
(2)Host:URI主机名,比如 www.google.com,如果host未指定则URI参数无效,URI无效。
(3)Port:RUI端口号,比如80,只有UR指定了scheme和host参数的时候才有意义。
(4)Path、pathPattern和pathPrefix:表述路径信息,其中path表示完整的路径信息;pathPattern也表示完整的路径信息;pathPrefix表示路径前缀信息。

你可能感兴趣的:(Android)