Android四大组件(番外):Intent

Intent并不是Android应用的组件,但它对于Android应用的作用非常大——它是Android应用内不同组件之间通信的载体。

Intent的作用

当Android运行时需要连接不同的组件时,通常就需要借助于Intent来实现。Intent封装了当前组件需要启动或触发的目标组件的信息。

  • 启动Activity:调用Context的startActivity(Intent intent)方法,方法中的Intent参数封装了需要启动的目标Activity的信息;
  • 启动Service:调用Context的startService(Intent intent)方法或bindService(Intent service, ServiceConnection conn, int flags)方法,方法中的Intent参数封装了需要启动的目标Service的信息;
  • 触发BroadcastReceiver:可调用Context的sendBroadcast(Intent intent)、sendStickyBroadcast(Intent intent)或sendOrderedBroadcast(Intent intent,String receivePermission)方法来发送广播,方法中的Intent参数封装了需要触发的目标BroadcastReceiver的信息。

Intent的优势

有人会认为上面这种做法多此一举,如某Activity需要启动另一个Activity,可以直接使用startActivity(Class activityClass)这样的方法。其实这种方法显然背离了Android的理念,使用Intent的优势主要有两点:

  • 提供了一致的编程模型,无论是启动Activity、Service还是BroadcastReceiver,Android可以使用统一的Intent对象来封装这种“启动意图”;
  • 解耦:某些时候,程序只想启动具有某种特征的组件(隐式Intent),并不想和某个具体的组件耦合,如果使用startActivity(Class activityClass)的方式来启动组件,会造成硬编码耦合。

Intent的分类

显示意图和隐式意图

  • 显示Intent:显示Intent明确指定需要启动或者触发的组件的名称,Android无需对该Intent做任何解析,系统直接找到目标组件,启动或触发它即可。
  • 隐式Intent:隐式Intent只是指定需要启动或者触发的组件应满足怎样的条件,Android系统需要对该Intent进行解析,解析出它的条件,然后再去系统中查找与之匹配的目标组件。如果找到符合条件的组件,就启动或触发它们。被调用的组件可以通过IntentFilter来声明自己能处理哪些隐式Intent。

PendingIntent

PendingIntent是对Intent的包装,一般通过调用PendinIntent的getActivity()、getService()、getBroadcastReceiver()静态方法来获取PendingIntent对象。与Intent对象不同的是:PendingIntent通常会传给其他应用组件,从而由其他应用程序来执行PendingIntent所包装的“Intent”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容