从源码剖析Android中的Intent组件

2019-12-10 18:49:29于海丽
易采站长站为您分析Android中的Intent组件,作者从源码剖析了Intent如何实现组件间的切换,需要的朋友可以参考下  

我们知道,Intent主要用来激活安卓几大组件,那么它具体是怎样来激活的?激活时是否可以携带java对象?为何要将对象序列化后才能传递?

一、Intent官网解释
Intent可以被startActivity用来加载Activity,也可以被broadcastIntent发送给指定的BroadReceiver组件,
或者被startService、bingService来与后台service通信。
Intent最主要作用就是加载Activity,好比Activity之间的胶水。
Intent数据结构:

  • action:所要执行的动作;(例如:ACTION_CALL创建打电话Activity;ACTION_BATTERY_LOW 发出广播警告电池电量低,)
  • data: 要使用的数据(Uri);
  • category:关于目标组件的信息;
  • component:目标组件的类名;
  • extras :这是Bundle数据。

    Intent解析:

    • 显式Intent,指定了目标组件的类名,即component,则已知目标组件,不需解析;
    • 隐式Intent,未指定目标组件component,或者不知道、不关心谁来接收Intent,需要Android自己去解析找到目标组件。

      隐式Intent解析方法:

      1.在AndroidManifest.xml里所有<intent-filter>及其中定义的Intent;
      2.通过PackageManager(获取当前设备所安装的应用程序package)查找能处理这个Intent的component。匹配Action、type、category三个变量来寻找。
      二、简单解释:
      Intent可以激活Andorid的三大组件:Activity、Service和BroadcastReceiver。使用Intent时一般要显式指定目标组件,若未指定则要根据Intent附带的action、type、category三个值来解析,查找能处理的组件。

      三、问题:Intent如何实现组件的切换,具体流程?
      1、基本方法:(以启动Activity为例)

      Intent i = new Intent(MainActivity.this, TargetActivity.class);
      startActivity(i);