1.activity启动方式
Android启动Activity有两种方式:显式调用和隐式调用。显式调用需要明确地指定被启动对象的组件信息,包括包名和类名;隐式调用则不需要明确指定组件信息。原则上一个Intent不应该既是显式调用又是隐式调用,如果二者共存的话,以显式调用为主。
显示Intent适合在同项目下使用,隐式Intent适合不同项目间的页面跳转。
显示Intent不可以跨应用使用,隐式Intent可以跨应用使用。(如果隐式Intent不需要跨应用启动,在AndroidManefests.xml中添加android:exported=false即可,exported这个属性默认值是由activity中有无intent-filter决定的,如果有intent-filter,默认值为true,否则为false。)

2.隐式调用
隐式调用需要Intent匹配目标组件的IntentFilter中设置的过滤信息,如果不匹配将无法启动目标activity。目标组件就是要启动的Activity,IntentFilter表示意图过滤,也被称为过滤列表。
一个IntentFilter为一个过滤列表,一个过滤列表中可以有多个过滤信息(action、catagory、data),一个Activity(目标组件)可以有多个过滤列表。

为了匹配过滤列表,需要同时匹配过滤列表中的 action、category、data信息,否则匹配失败。一个过滤列表中的action、category和data可以有多个,所有的action、category、data分别构成不同类别,同一类别的信息共同约束当前类别的匹配过程。只有一个Intent同时匹配action类别、category类别、data类别才算完全匹配,只有
完全匹配才能成功启动目标 Activity。

一个Activity中可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter就能成功启动对应的Activity。

3.action的匹配规则
action表示该activity可以执行的动作。如果跟< intent-filter>所列出的任意一个匹配的话,就说明这个activity是可以完成intent意图的,可以将它激活。
注意:一条< intent-filter>元素至少应该包含一个< action>,否则任何intent请求都不能和该< intent-filter>匹配。一个intent只能指定一个action,但是一个目标activity可以设置多个action(即< intent-filter>中可以设置多个action属性)。

action是一个字符串,系统预定义了一些action,同时也可以定义自己的action。
action的匹配规则:
①一个intent-filter中可以有多个action,只要Intent中的action能和过滤列表中任何一个action相同就算是匹配成功。
②action区分大小写,大小写不同字符串相同的action也会匹配失败。

4.category的匹配规则
category用于指定当前动作(action)执行的环境,即这个activity在哪个环境中才能被激活。不属于这个环境的,不能被激活。
如果目标activity想要通过隐式调用方式激活,那么不能没有任何category设置,至少包含一个android.intent.category.DEFAULT。
一个intent只能有一个action,但是可以有多个category。同一个intent中多个category彼此间是“与”的关系,也就是说一个组件要支持全部的category才能处理该请求。

category是一个字符串,系统预定义了一些 category,同时也可以定义自己的category。
category匹配规则:
①Intent可以没有category,但是如果一旦有category,那么每一个都要和过滤规则中任何一个category相同,这个是intent占主动,和action不同,action是过滤列表提供几个,让Intent选择一个,这个则是Intent有几个,那么IntentFilter中也要有,但是并没有限制IntentFilter中category的数目多少,这个可以随意只需要满足intent中需要的category就可以了。(IntentFilter中要包含Intent中全部的category,而且可以有多余的)(IntentFilter中只要有一个与Intent中的action相同即可)
②如果Intent中没有category,但是在startActivity或者startActivityForResult的时候都会默认的为Intent加上 “android.intent.category.DEFAULT”,所以必须要在IntentFilter的category中添加上< category android:name=“android.intent.category.DEFAULT”>。
所以,隐式启动的activity在Android Manefests配置中务必加上< category android:name=“android.intent.category.DEFAULT”/>
③单靠category不能进行匹配,需结合action匹配使用。

5.data的匹配规则
data表示执行时要操作的数据,即执行动作的URI,不同的动作有不同的数据规格。
如果定义了data,但intent却没有传进来指定类型的data,也不能激活该activity。
和action一样,是过滤规则占据主动。

常用的数据规格有:
http:// 表示网址
file:// 表示文件
tel:// 表示电话
mailto: 表示发送邮件
geo: 表示地理位置
content:// 表示ContentProvider

①data的结构
data由两部分组成:mimeType和URI。
mimeType指的是媒体类型,比如image/jpeg、audio/mpeg4-generic、video/*等。

URI比较复杂结构如下:
< scheme>://< host>:< port>/[< path>|< pathPrefix>|< pathPattern>]
对比来看:
http

Android Activity的隐式调用(跨进程)★相关推荐

  1. Android之使用AIDL时的跨进程回调—Server回调Client

    首先建立在server端建立两个aidl文件 ITaskCallback.aidl 用于存放要回调client端的方法 package com.cmcc.demo.server; interface ...

  2. Android 使用Messenger和Aidl实现跨进程通信

    Android Messenger和Aidl的使用 1.怎么使用多进程 为安卓的四大组件设置process属性值 例如:android:process=":test"或者 andr ...

  3. android studio 跨进程,Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用...

    本文首发于微信公众号「后厂技术官」 在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messeng ...

  4. 【朝花夕拾】Android跨进程通信总结篇

    前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...

  5. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/10256379.html],谢谢! 只要是面试高级工程师岗位,Android跨进程通信就是最受面 ...

  6. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇...

    前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...

  7. Android跨进程通信Binder机制与AIDL实例

    文章目录 进程通信 1.1 进程空间划分 1.2 跨进程通信IPC 1.3 Linux跨进程通信 1.4 Android进程通信 Binder跨进程通信 2.1 Binder简介 2.2 Binder ...

  8. android四个组件的跨进程通信

    Android四大组件(Activity,service,broadcast,Content Provider)跨进程通信相信在android项目中进程用到,此处将一一做以说明以及总结. 1.简括: ...

  9. Android开发之跨进程通信-广播跨进程实现方法(附源码)

    真的特别简单,简单概述下android的四大组件都可以跨进程. Activity,广播,服务,内容提供者都可以 先看下跨进程传递数据的效果图 下面是两个APP用于模拟跨进程 再看下跨进程效果,AIDL ...

最新文章

  1. java书籍_Java程序员必看的 13 本 Java 书籍!
  2. CodeSmith实用技巧(十五):使用快捷键
  3. 数据库的三大范式和五大约束(转)
  4. 有不含有重复数字的数组构造二叉树_Leetcode刷题记录:构建最大数二叉树
  5. VTK:Rendering之Rotations
  6. Datatable/Dataset 转 JSON方法
  7. Git本地仓库管理远程库(GitHub)——clone(下载)、push(提交)、pull(拉取)操作
  8. mysql 5.6.37 winx64_Mysql 5.6.37 winx64安装双版本mysql笔记记录
  9. 手动标记用例状态_【自动化接口用例】从 1 到 1000 过程中的实践和思考
  10. MOOC-首都师范-博弈论-焦宝聪-第六章-动态博弈学习笔记(五)
  11. java 前后端分离
  12. 用auto.js写一个自动刷快手抖音视频的小玩意
  13. 这届年轻人正在背着你偷偷攒钱
  14. 卡耐基梅隆 计算机专业 年薪,卡内基梅隆大学就业率及薪资排名
  15. lamp技术研发人员的必备
  16. iOS微信网页长按图片问题解决
  17. 3060ti配什么cpu和主板
  18. 禁止电脑开机自动打开浏览器
  19. md文件编写常用语法类型
  20. centos上搭建nginx视频点播服务器(nginx+vod+lua http发送鉴权消息)

热门文章

  1. 吴军的谷歌方法论|周末放送|Google的个人英雄主义和群众路线
  2. 织足袜子机报道:全国棉花收购价低于去年 加工量同比大减
  3. Alexnet详解以及tesnsorflow实现alexnet;什么是alexnet alexnet能做什么;alexnet教程
  4. 电子垃圾绿色回收之路怎么走?
  5. 展现AI与自动化测试技术之间的神奇化学反应
  6. Mysql数据库备份恢复
  7. Spss-kmeans聚类实操
  8. 央视新闻30分:开心网流行背后存在的隐忧
  9. 前端 数组转字符串,字符串转数组
  10. 看到这些让员工无处遁形专利,我麻了