Android到底那个Acitivity启动(二)
来源:互联网 发布:网络热门作家 像汤唯 编辑:程序博客网 时间:2024/05/22 12:08
启动那个Acitivity有两种方式:implicit(隐藏) intent 和 explicit(明确) intent Explicit Intent Implicit Intent 没有明确的指定要启动哪个Activity ,而是通过设置一些Intent Filter来让系统去筛选合适的Acitivity去启动。 当使用startActivity时,隐式Intent解析到一个单一的Activity。如果存在多个Activity都有能力在特定的数据上执行给定的动作的话,Android会从这些中选择最好的进行启动。 Action Implicit Intent 一个Intent Filter有一个或多个定义的动作,如果没有任何一个能与Intent指定的动作匹配的话,这个Intent Filter在算作是动作匹配检查失败。 元素中可以包括子元素,比如: 一条元素至少应该包含一个,否则任何Intent请求都不能和该匹配。如果Intent请求的Action和中个某一条匹配,那么该Intent就通过了这条的动作测试。 Category Implicit Intent 元素可以包含子元素,比如: Data Implicit Intent mimetype是正在匹配的数据的数据类型。当匹配数据类型时,你可以使用通配符来匹配子类型(例如,earthquakes/*)。如果Intent Filter指定一个数据类型,它必须与Intent匹配;没有指定数据的话全部匹配。 解析出来后的处理逻辑 Android本地的应用程序组件和第三方应用程序一样,都是Intent解析过程中的一部分。它们没有更高的优先度,可以被新的Activity完全的代替,这些新的Activity宣告自己的Intent Filter能响应相同的动作请求。 应用程序的启动 如下图设置,是 .SplashActivity 先启动的 1.0" encoding="utf-8"?> activity android:name: activity 的类名,必须有。 android.intent.action.MAIN 决定应用程序最先启动的Activity android.intent.category.LAUNCHER 决定应用程序是否显示在程序列表里
明确的指定了要启动的Acitivity
比如以下Java代码,明确指定了要启动B:
Intent intent= new Intent(this, B.class)
Implicit Intent 到底发给哪个activity?
这需要进行三个匹配,一个是action,一个是category,一个是data。根据三个的匹配结果,找到应该启动的Activity。
动作匹配指Android Intent Filter包含特定的动作或没有指定的动作。
种类匹配更为严格。Intent Filter必须包含所有在解析的Intent中定义的种类。一个没有特定种类的Intent Filter只能与没有种类的Intent匹配。
只有当Intent请求中所有的Category与组件中某一个IntentFilter的完全匹配时,才会让该Intent请求通过测试,IntentFilter中多余的声明并不会导致匹配失败。
Intent的数据URI中的部分会与Intent Filter中的data标签比较。如果Intent Filter定义scheme,host/authority,path或mimetype,这些值都会与Intent的URI比较。任何不匹配都会导致Intent Filter从列表中删除。没有指定data值的Android Intent Filter会和所有的Intent数据匹配。
scheme是URI部分的协议——例如,http:,mailto:,tel:。
host-name或“data authority”是介于URI中scheme和path之间的部分(例如,www.google.com)。匹配主机名时,Intent Filter的scheme也必须通过匹配。
数据path是紧接在“data authority”的后面(例如,/ig)。path只在scheme和host-name部分都匹配的情况下才匹配。
数据在中的描述如下:
元素指定了希望接受的Intent请求的数据URI和数据类型,URI被分成三部分来进行匹配:scheme、authority和path。其中,用setData()设定的Inteat请求的URI数据类型和scheme必须与IntentFilter中所指定的一致。若IntentFilter中还指定了authority或path,它们也需要相匹配才会通过测试。
如果这个过程中多于一个组件解析出来的话,它们会以优先度来排序,可以在Android Intent Filter的节点里添加一个可选的标签。最高等级的组件会返回。
AndroidManifest.xml 文件中,把那个 activity 配置了 ,那就就是最先被启动的 Activity ,如果多个设置了,则第一个设置的是最新被启动的 Activity。
http://schemas.android.com/apk/res/android"
package="ghj1976.HelloWorld" android:versionCode="1"
android:versionName="1.0">
3" />
@drawable/icon" android:label="@string/app_name">
.HelloWorldActivity" android:label="@string/app_name">
.SplashActivity" android:label="@string/app_name">
android.intent.action.MAIN" />
android.intent.category.LAUNCHER" />
上面代码中的
- Android到底那个Acitivity启动(二)
- Android到底那个Acitivity启动
- Android到底那个Acitivity启动
- Android到底哪个Acitivity启动
- Android Acitivity启动模式
- Android网页中启动Acitivity
- 启动acitivity
- Android活动Acitivity启动模式之standard
- Android活动Acitivity启动模式之singleTop
- Android活动Acitivity启动模式之singleTask
- Android活动Acitivity启动模式之singleInstance
- Android活动Acitivity启动模式之singleTop
- Android活动Acitivity启动模式之standard
- Android 是怎么启动一个Acitivity的?
- Android活动Acitivity启动模式之standard
- Android活动Acitivity启动模式之singleTop
- Android活动Acitivity启动模式之singleTask
- Android活动Acitivity启动模式之singleInstance
- Android 的启动方式
- 移植ANDROID系统到MINI2440的步骤
- java 设计模式学习笔记(13) - 适配器模式
- UC杂记 05/05/2011
- 解决windows7下vs2008不能正常编译ActiveX控件的问题
- Android到底那个Acitivity启动(二)
- 可视化的数据结构
- poj1145 Tree Summing (经典)
- Fedora 9安装vmware tools解决方案
- 一种全局对象ID生成方法
- C语言编译全过程
- Oracle10g数据库的4种存储形式(zhuan)
- aspx页面上的分页逻辑
- java速度入门_七java与Mysql整合