Activity的启动模式

  • 时间:
  • 浏览:1

可能性被启动的Activity是 singleTask,singleInstance模式时,可能性指定taskAffinity属性,则Activity被加入到 指定的栈任务栈中,未指定则被加入 以包名命名的任务栈. singleInstance模式的Activity,虽然 可能性被加入到名字相同的栈,很多很多很多很多 可能性其特殊性,虽然 栈名相同很多很多很多很多 不属于同三个 多栈.

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

即 具有 clearTop的效果.

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

在调用 startActivity可能性startActivityForResult时,系统会为intent自动再加 android.intent.category.DEFAULT标志,很多很多很多很多可能性要想隐式的调用Activity,就须要在 IntentFilter中再加 <category android:name="android.intent.category.DEFAULT" />规则.

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

intent的启动有三种最好的办法 ,显式调用和隐式调用.

显示调用,亲戚朋友儿须要明确的指定被启动的Activity的组件信息,Activity的class对象.

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

当Activity的启动模式为 singleTask,singleInstance模式时,taskAffinity属性将在Activity被启动的要是指定任务栈,可能性任务栈不居于则会创建三个 多taskAffinity命名的任务栈存放启动的Activity.

data中指设置了 mimeType时,可不都可不可以 使用 schemefile或content类型来设置data.

可能性须要同時 指定URImimeType,须要使用intent的setDataAndType最好的办法 .

引用 官方示例来说明 :

intent中可能性富含 category,沒有所有的category都能在IntentFilter中匹配上,intent中里可不都可不可以 不显式的设置category.

taskAffinityAndroidManifest中 Activity标签的属性,表示任务栈的名称.该属性可不都可不可以 为 Activity指定任务栈.

使用 application来启动Activity时, application沒有所在的 任务栈.可能性沒有指定 FLAG_ACTIVITY_NEW_TASK,可能性有如下报错.

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

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

可能性IntentFilter中设置了 data属性.则intent中须要设置 setData可能性setType可能性setDataAndType.

setData可能性setType最好的办法 的属性会相互覆盖.本人 的最好的办法 会将对方属性设置为null.

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

2018-10-02-22-46-05

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

Intent沒有同時 匹配了 action规则,category规则 和 data规则,可不都可不可以 成功的启动目标Activity.

隐式intent启动要是,亲戚朋友儿可不都可不可以 先检查 目标Activity的可达性,解决出现 android.content.ActivityNotFoundException: No Activity found to handle Intent的错误.

intent中须要设置 action, 且能过匹配 IntentFilter中的任意三个 多 action就算匹配成功.

三个 多 IntentFilter中可不都可不可以 设置多个 action,多个category和多个data.

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

URI形态 : <scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]

mimeType : image/jpeg,video/*等.