Android四大组件
一、Activity
Intent
- Action项,用来表示动作。
- Data项,当发起请求时,调用组件如果有明确的数据对象,通常就会用Data项来存储表示。
- Type项,Type是MINE格式的字符串数据,用于描述组件能够处理的请求类型,或者补充说明Data数据的类型,它可以通过通配符*来表示整个类别的信息。
- Category项,Category表示约束。每个Intent对象可包含多个Category项。而一个组件需要支持全部的Category才可能处理请求。
- Component项,它指的是目标组件的类型信息。
- Extras项,Intent中数据传输的载体,负责将数据从调用组件传递到实现组件。
- Flags项,Flags是一个整数型,由一系列的标志位汇集而成。
生命周期
PS:Activity生命周期详解可以看本人另一篇文章
Activity生命周期详细解读(含部分源码)
Fragment生命周期
启动模式
配置方式:
- AndroidManifest.xml中配置launchMode;
- Java中设置Intent.setFlags()。
四种启动模式
- standard
默认启动模式,每次启动Activity,无论任务栈中是否已经有这个Activity的实例,系统都会创建一个新的Activity实例。 - singleTop
当一个singleTop模式的Activity已经位于任务栈的栈顶,再去启动它时,不会再创建新的实例,如果不位于栈顶,就会创建新的实例。 - singleTask
在同一个Task内只有一个实例,如果Activity已经位于栈顶,系统不会创建新的Activity实例,和singleTop模式一样。但Activity已经存在但不位于栈顶时,系统就会把该Activity移到栈顶,并把它上面的activity出栈。 - singleInstance
singleInstance Activity在整个系统里只有一个实例,启动一singleInstanceActivity时,系统会创建一个新的任务栈,并且这个任务栈只有他一个Activity。
二、Service
启动方式(Start&Bind)
- 其他组件调用startService()方法时,会触发onStartCommand()方法。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。服务完成任务后可以调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。
- 使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。
生命周期
IntentService
- 当任务执行完后,IntentService会自动停止,不需要手动去控制或stopSelf();
- 可以启动IntentService多次,每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,且每次只执行一个线程。
三、Broadcast Receiver
对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。
四、Content Provider
- 使用Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。
- 只有需要在
多个应用程序间共享数据
是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。 - ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是
不同应用程序间共享数据的唯一方式
,因为android没有提供所有应用共同访问的公共存储区。 - 开发人员不会直接使用ContentProvider类的对象,大多数是
使用ContentResolver对象实现对ContentProvider的操作
。 - ContentProvider
使用URI来唯一标识其数据集
,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。