1.Activity的生命周期
生命周期这个事情,是android工程师最基础的知识,所以今天要讲的是一些不一样的东西。
1.1 OnStart,OnResume,OnPause,OnStop 他们的区别是什么?
OnStart & OnStop, 这一对发生的时候,页面已经显示,但是处于backgroud的状态,所以用户无法看到。
OnResume & OnPause,发生在用户可以看到页面,也就是从后台到前台。
OnPause->OnStop,如果下个页面是透明的,OnStop不会被呼叫。
2.Activity的启动flag
4大启动模式,也是最基本的知识,。
只有activity可以启动其他的
application 启动activity,由于没有历史栈,需要加flag:FLAG_ACTIVITY_NEW_TASK
这样这个activity会存在一个新task
FLAG_ACTIVITY_NEW_TASK:这个标志同singtask launchmode的效果一样。
FLAG_ACTIVITY_SINGLE_TOP:这个标志同singletop 效果一样。
FLAG_ACTIVITY_CLEAR_TOP: 会把在task 栈上面的activity,出栈。
3.intentFilter
intentFilter是用于隐式调用的,显示调用&隐式调用同时存在,将以显示调用为准
intentFilter有三个部分组成:action,category,& data
一个activity可以有几组intentFilter,只要匹配一个,就可以启动activity
但是必须同时瞒住action,category & data的匹配,才能保证activity被启动。
同一个intentFilter可以有几个action,只要满足一个就可以,同理category & data也是。
Action:action的字串,必须完全一致,才能算作匹配。
Category:category可以有多个,但是每一个都必须同 intentFilter的某一个匹配。Category也可以为空,这样系统会默认为我们加上action.intent.category.DEFAULT 这样就要求每个支持隐式调用的activity,都必须有action.intent.category.DEFAULT
Data:data的匹配规则跟action相似。只要匹配一个元素,但是必须使用setdataandType 方法来设定。Setdata & setType这2个方法是互斥的。
当我们在使用隐式启动activity的时候,可以先使用PackageManager的resolveActivity 或者Intent的resolveActivity,在查询的时候,需要加flag:MATCH_DEFAULT_ONLY
还有一个特殊的页面:action = android.intent.action.MAIN category=android.intent.category.LAUNCH缺一不可