Activity的启动模式

  • 时间:
  • 浏览:0
  • 来源:大发彩神UU快三_大发神彩UU快三官方

intent中原困 饱含 category,越来越所有的category都能在IntentFilter中匹配上,intent中也后能 不显式的设置category.

当启动Activity时,原困 Activity原困 居于于 任务栈的非栈顶位置, 任务栈中该Activity之上的 Activity原困 被完整篇 移除,只保留该Activity以及其一下的Activity.

即 具有 clearTop的效果.

在调用 startActivity原困 startActivityForResult时,系统会为intent自动加在 android.intent.category.DEFAULT标志,统统原困 要想隐式的调用Activity,就还要在 IntentFilter中加在 <category android:name="android.intent.category.DEFAULT" />规则.

一一俩个 IntentFilter中后能 设置多个 action,多个category和多个data.

当启动Activity的任务栈B在后台时,此时任务栈A中的Activity启动了,任务栈B中的 singleTask模式的Activity,则任务B栈的 被启动Activity会clearTop到栈顶位置,有然后整个任务栈B重返至前台.

原困 IntentFilter中设置了 data属性.则intent中还要设置 setData原困 setType原困 setDataAndType.

setData原困 setType办法 的属性会相互覆盖.所有人的办法 会将对方属性设置为null.

前台栈中的栈顶Activity2 启动了 居于后台栈的 ActivityY,此时 后台栈中的 ActivityY和ActivityX 都是被移动至前台栈中,回退两次并能回到 Activity2.

使用 application来启动Activity时, application越来越所在的 任务栈.原困 越来越指定 FLAG_ACTIVITY_NEW_TASK,原困 有如下报错.

当Activity的启动模式为 standard,singletop模式时,taskAffinity属性将失效, Activity的将被加入到 启动它的那个Activity所在的栈.一一俩个 例外,原困 在入口Activity中指定 taskAffinity属性,则后能 生效,原困 此时应用刚启动,还越来越指定的任务栈(默认的任务栈是以包名来命名的).

隐式intent启动然后 ,大家后能 先检查 目标Activity的可达性,出理 再次出现 android.content.ActivityNotFoundException: No Activity found to handle Intent的错误.

当Activity的启动模式为 singleTask,singleInstance模式时,taskAffinity属性将在Activity被启动的然后 指定任务栈,原困 任务栈不居于则会创建一一俩个 taskAffinity命名的任务栈存放启动的Activity.

原困 被启动的Activity是 singleTask,singleInstance模式时,原困 指定taskAffinity属性,则Activity被加入到 指定的栈任务栈中,未指定则被加入 以包名命名的任务栈. singleInstance模式的Activity,确实原困 被加入到名字相同的栈,有然后原困 其特殊性,确实栈名相同有然后不属于同一一俩个 栈.

引用 官方示例来说明 :

2018-10-02-22-46-05

data由两累积组成, URI 和 mimeType(媒体类型).

任务栈信息后能 通过 adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'指令来查看 栈信息.

taskAffinityAndroidManifest中 Activity标签的属性,表示任务栈的名称.该属性后能 为 Activity指定任务栈.

Intent非要一齐匹配了 action规则,category规则 和 data规则,并能成功的启动目标Activity.

intent中还要设置 action, 且能过匹配 IntentFilter中的任意一一俩个 action就算匹配成功.

intent的启动有并不是办法 ,显式调用和隐式调用.

显示调用,大家还要明确的指定被启动的Activity的组件信息,Activity的class对象.

隐式调用则不还要明确的知道 被调用的Activity信息,统统通过IntentFilter来指定action,category,data过滤规则配合来启动Activity.

原困 被启动的Activity是 standard,singletop模式时, Activity将被加入到启动该Activity的任务栈中.

data中指设置了 mimeType时,后能 使用 schemefile或content类型来设置data.

原困 还要一齐指定URImimeType,还要使用intent的setDataAndType办法 .

URI特性 : <scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]

mimeType : image/jpeg,video/*等.

使用 intent的 intent.resolveActivity(packageManager) 和 packageManager的packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY)来检查, 返回 null则表示找非要匹配的Activity.