Android四大组件

一、Activity

Intent

  1. Action项,用来表示动作。
  2. Data项,当发起请求时,调用组件如果有明确的数据对象,通常就会用Data项来存储表示。
  3. Type项,Type是MINE格式的字符串数据,用于描述组件能够处理的请求类型,或者补充说明Data数据的类型,它可以通过通配符*来表示整个类别的信息。
  4. Category项,Category表示约束。每个Intent对象可包含多个Category项。而一个组件需要支持全部的Category才可能处理请求。
  5. Component项,它指的是目标组件的类型信息。
  6. Extras项,Intent中数据传输的载体,负责将数据从调用组件传递到实现组件。
  7. Flags项,Flags是一个整数型,由一系列的标志位汇集而成。

生命周期

Activity生命周期

PS:Activity生命周期详解可以看本人另一篇文章
Activity生命周期详细解读(含部分源码)

Fragment生命周期

Fragment生命周期

启动模式

配置方式:

  1. AndroidManifest.xml中配置launchMode;
  2. Java中设置Intent.setFlags()。

四种启动模式

  1. standard
    默认启动模式,每次启动Activity,无论任务栈中是否已经有这个Activity的实例,系统都会创建一个新的Activity实例。
  2. singleTop
    当一个singleTop模式的Activity已经位于任务栈的栈顶,再去启动它时,不会再创建新的实例,如果不位于栈顶,就会创建新的实例。
  3. singleTask
    在同一个Task内只有一个实例,如果Activity已经位于栈顶,系统不会创建新的Activity实例,和singleTop模式一样。但Activity已经存在但不位于栈顶时,系统就会把该Activity移到栈顶,并把它上面的activity出栈。
  4. singleInstance
    singleInstance Activity在整个系统里只有一个实例,启动一singleInstanceActivity时,系统会创建一个新的任务栈,并且这个任务栈只有他一个Activity。

二、Service

启动方式(Start&Bind)

  1. 其他组件调用startService()方法时,会触发onStartCommand()方法。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。服务完成任务后可以调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。
  2. 使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。

生命周期

Service生命周期

IntentService

  1. 当任务执行完后,IntentService会自动停止,不需要手动去控制或stopSelf();
  2. 可以启动IntentService多次,每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,且每次只执行一个线程。

三、Broadcast Receiver

对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。

四、Content Provider

  1. 使用Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。
  2. 只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。
  3. ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
  4. 开发人员不会直接使用ContentProvider类的对象,大多数是使用ContentResolver对象实现对ContentProvider的操作
  5. ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。
全部评论

相关推荐

头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务