开发艺术|Activity篇笔记

1、Activity生命周期:

 

Activity生命周期主流程:

 

onCreate()->onStart()->onResume()->onPause()->onStop()->onDestory()

 

Activity1打开Activity2,生命周期流程:

 

Activity1:onPause()->Activity2:oCreate()->onStart()->onResume()->Activity1:onStop()

 

Activity2回到Activity1的生命周期流程:

 

Activity2:onPause()->Activity1:onRestart()->onStart()->onResume()->Activity2:onStop()->onDestory()

 

Activity1弹出Activity2对话框生命周期流程:

 

Activity1:onPasue()->Activity2:onCreate()->onStart()->onResume()

 

Activity2对话框弹出时 点击Home键的生命周期流程:

 

Activity2:onPause()->onStop()->Activity1:onStop()

 

从桌面回到Activity2对话框打开的界面:

 

Activity1:onRestart()->onStart->Activity2:onRestart()->onStart()->onResume()

 

Activity横屏变竖屏生命周期的流程:

 

onPause()->onSaveInstanceState()->onStop()->onDestory->onCreate()->onStart()->onRestoreInstanceState()->onResume()

 

2、Activity四种启动模式:

 

standard(标准模式、默认模式):

 

Activity开启的默认模式。每当创建一个新的Activity实例,都会在栈顶新建一个Activity。

:栈中有ABCD四个Activity,D_Activity的启动模式为standard,那么当实例化一个新的D_Activity的时候,任务栈就变成了ABCDD。

 

singleTop(栈顶复用模式):

 

这种模式的情况下,如果此Activity在栈顶,那么就不会创建新的Activity,但此Activity的onNewIntent()方法会被调用;如果不在栈顶,就在栈顶创建新的Activity。

:占中有ABCD四个Activity,C_Activity和D_Activity的启动模式都为singleTop。当前实例化一个新的D_Activity的时候,栈内变化为ABCD(没变化)。当时实例化一个新的C_Activity的时候,站内变化为ABCDC。

 

singleTask(栈内复用模式):

 

这种模式的情况下,栈内不会存在重复的Activity。和singleTop模式一样,启动新的Activity的时候不会实例化新的Activity,而是调用onNewIntent()方法。该模式下也可指定任务栈,若不存在指定的任务栈,就创建新的任务栈,再实例化Activity;若存在指定的任务栈,该任务栈中是否存该Activity,若存在,调用onNewIntent();若不存在,实例化新的Activity。(任务栈默认为项目的包名,可通过设置TaskAffinity指定

1. 有ABCD四个Activity存在任务栈内,且C_Activity,D_Activity的启动模式为singleTask。当实例化新的D时,任务栈的变化为ABCD(无变化),D_Activity生命周期为:onPause()->onNewIntent()->onResume();当实例化C时,任务站的变化为ABC,C_Activity生命周期为:onNewIntent()->onRestart()->onStart()->onResume()

 

2.任务栈S1中有ABC三个Activity,任务栈S2中有ABCD四个Activity,C_Activity的启动模式为singleTask。当在S1任务栈中实例化一个新的C,且指定在S2任务栈中启动,那么S1任务栈:ABC(无变化),S2任务栈:ABC。

 

singleInstance(单实例模式):

 

这是一种加强了的singleTask的模式。具有此模式的Activity启动时,系统会新创建一个任务栈存放此Activity,且只存放这个Activity,之后再实例化新的Activity时,也不会再创建。

 

标记:(优先级高于xml中设置launchMode)

 

FLAG_ACTIVITY_NEW_TASK:其作用等同于singleTask

 

FLAG_ACTIVITY_SINGLE_TOP:其作用等同于singleTop

 

FLAG_ACTIVITY_CLEAR_TOP:具有此标记的Activity启动时,在同一个栈中位于它上面的Activity都要出栈。这个模式一般和FLAG_ACTIVITY_NEW_TASK配合使用,如果Activity已存在,则调用它的onNewIntent()。如果启动的Activity采用的是standard模式,那么它连同他之上的Activity都要出栈,系统会创建新的实例存入栈中。

 

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有此标记的Activity不会出现在历史Activity的列表中。某些情况下我们不希望用户通过历史列表回到我们的Activity的时候这个标记比较有用。

 

3、IntentFilter的匹配规则:

 

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

 

action的匹配规则

 

action是一个字符串。匹配规则:Intent中的action存在且必须与过滤规则中的其中一个action相同。(action区分大小写)

 

category的匹配规则

 

category是一个字符串。匹配规则:Intent中可以没有category,一旦有,不管几个都要和目标Activity的category一一对应。

可以没有的原因:系统在调用startActivity或者startActivityForResult的时候会默认加上“android.intent.category.DEFAULT”这个category。同时,为了我们的Activity能够接收到隐式调用,就必须在intent-filter中指定“android.intent.category.DEFALULT”这个category。

 

data的匹配规则

 

data匹配规则和action类似。如果过滤条件中定义了data,那么Intent中必须也要定义可匹配的data。(完全匹配)

data的属性字段:

android:scheme="string"

android:host="string"

android:port="string"

android:path="string"

android:pathPattern="string"

android:pathPrefix="string"

android:mimeType="string"

 

data主要有mimeType和URI组成。mimeType是文件类型。例如:image/jpeg。URI的结构如下:

<scheme>://<host>:<hort>/[<path>|<pathPsttern>|<pathPrefix>]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值