Android四大组件详解

本文详细介绍了Android开发中的四大核心组件:Activity、Service、BroadcastReceiver及ContentProvider。分别阐述了它们的作用、基本状态、生命周期方法及使用场景,帮助开发者更好地理解和运用这些组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Android 开发的四大组件分别是:

活动(activity),用于表现功能;

服务(service),后台运行服务,不提供界面呈现;

广播接受者 (Broadcast Receive),勇于接收广播;

内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库。

Activity

1.定义:

Activity组件,在应用中的一个Activity可以用来表示一个界面,意思可以理解为“活动”,即一个活动开始,代表 Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个Android应用必须通过Activity来运行和启 动,Activity的生命周期交给系统统一管理。

2.三个基本状态:

Resumed 一个新Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。

Paused 当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。此时它依旧与窗口管理器保持连接,系统继续维护其内部状态,所以它依然可见,但它己经失去了焦点故不可与用户交互。

Stopped 当Activity被另一个Activity覆盖、失去焦点并不可见时处于Stopped状态

3.七大方法

  • onCreate() Activity创建时第一个调用的方法,通常我们在该方法中加载布局文件,初始化UI组件,事件注册等等

  • onStart() 在onCreate方法之后调用,用于显示界面,但当前用户不能进行交互

  • onResume() 在onStart方法后调用,该方法执行完成后,用户可进行交互,当前Activity进入Resumed状态(运行状态);当一个Paused状态的activity被重新返回时,会再次调用该方法,让Activity进入运行状态

  • onRestat() 当一个Stopped状态的Activity被返回时,该方法被调用,之后再调用onResume()方法进入运行状态

  • onPause() 当 其他Activity(透明或窗口模式)进入时,该方法会被调用,让当前Activity进入Paused状态(暂停状态);当前Activity还可见 但不可交互,如果其他更高优先级的app需要内存时,当前Activity可能会被销毁(kill);当前Activity被返回时会调用 onResume()方法

  • onStop() 当其他Activity完全覆盖该Activity时,该方法被调用,当前 Activity进入Stopped状态(停止状态);当前Activity不可见,如果其他更高优先级的app需要内存时,当前Activity可能会 被销毁(kill);当前Activity被返回时会调用onRestart()方法

  • onDestroy() 当前Activity被销毁时调用,通常在该方法中用来释放资源,当前Activity killed

4.生命周期

 5.Activity之间通过Intent进行通信;直接通过Bundle对象来传递

Service

1.service(服务)是安卓中的四大组件之一,它通常用作在后台处理耗时的逻辑,,并且可以和其他组件进行交互。

2.生命周期

 3.启动方式:··startService(启动);··bindService(绑定服务)

4.startService()与bindService()区别:

  • startService只是启动Service,启动它的组件(如Activity)和Service并没有关联,只有当Service调用stopSelf或者其他组件调用stopService服务才会终止。

  • bindService方法启动Service,其他组件可以通过回调获取Service的代理对象和Service交互,而这两方也进行了绑定,当启动方销毁时,Service也会自动进行unBind操作,当发现所有绑定都进行了unBind时才会销毁Service。

5.IntentService

  • 内部有一个工作线程来完成耗时的操作,只需实现onHandleIntent方法即可
  • 完成工作后会自动终止服务
  • 如果同时执行多个任务时,会以工作队列的方式,一次执行
  • 通过该类来完成本APP中耗时的工作

Broadcast Receive

1.BroadcastReceiver也就是"广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。在Android系统中, 广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条 广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。

2.广播接收器的类型

  • Normal broadcasts:默认广播

  • Ordered broadcasts:有序广播

  • Sticky broadcasts:粘性广播

3.注册广播接收器的两种方式

  • 静态注册:静态注册是在AndroidManifest.xml配置文件中注册

  • 动态注册:需要在代码中动态指定广播地址并注册,通常我们是在Activity或Service注册一个广播。

4.区别:

动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。

静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

ContentProvider

android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。

只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。

ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。

开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。

ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。

总结

  • Activity:是整个应用程序的门面,主要负责应用程序当中数据的展示,是各种各样控件的容器,是用户和应用程序之间交互的接口
  • Service:在前台不可见,但是承担大部分数据处理工作,它和Activity的地位是并列的,区别在于Activity运行于前台,Service运行于后台,没有图形用户界面,通常他为其他的组件提供后台服务或监控其他组件的运行状态
  • BroadcastReceiver:实现消息的异步接收,他非常类似事件编程中的监听器,但他与普通事件监听器有所不同,普通的事件监听器监听的事件源是程序中的控件,而BroadcastReceiver监听的事件源是Android应用中其他的组件
  • ContentProvider:为不同的应用程序之间数据访问提供统一的访问接口,通常它与ContentResolver结合使用,一个是应用程序使用ContentProvider来暴露自己的数据,而另外一个是应用程序通过ContentResolver来访问数据

### Android 四大组件详细介绍 #### 1. Activity 组件 Activity 是 Android 应用程序的一个核心组成部分,代表单个屏幕上的操作。每个应用程序通常由多个不相关的 Activity 构成。当启动某个应用程序时,会加载一个特定的 Activity 并显示其界面给用户。 - **生命周期**: 每个 `Activity` 都有一套完整的生命周期管理方法,如 `onCreate()`, `onStart()`, `onResume()` 等等。 - **交互特性**: 用户可以通过触摸屏或其他输入设备与当前活动窗口互动,完成各种功能需求。 ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } ``` #### 2. Service 组件 Service 运行在后台执行长时间运行的操作而不需要提供任何用户界面的应用逻辑单元。它可以用来播放音乐、处理网络事务或计算某些数值等耗时较长的任务。 - **两种模式**: - 使用 `startService()` 启动的服务会在任务完成后自动停止; - 而通过 `bindService()` 建立连接后,则需显式调用解绑函数才能结束服务实例[^1]。 - **IntentService 类型**: 提供了一种简化版的服务形式,专门用于异步处理来自客户端的一次性请求并立即关闭自己。 ```java // 定义一个简单的Service类 public class MyService extends Service { private final IBinder binder = new LocalBinder(); public class LocalBinder extends Binder { MyService getService() { return MyService.this; } } @Nullable @Override public IBinder onBind(Intent intent) { return binder; } // 实现具体业务逻辑... } ``` #### 3. BroadcastReceiver 组件 BroadcastReceiver 可以让应用监听系统范围内的广播消息,并作出响应。这些消息可能来自于操作系统本身或者其他正在运行的应用程序。 - **静态 vs 动态注册** - 在清单文件 (`AndroidManifest.xml`) 中声明为静态接收者; - 或是在代码里临时创建动态实例,在适当时候注销掉它[^3]。 - **工作流程**: 当接收到匹配过滤条件的消息时触发 `onReceive(Context context, Intent intent)` 方法。 ```java public class UnorderedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.d("UnorderedReceiver", "Received broadcast with action: " + action); } } ``` #### 4. ContentProvider 组件 ContentProvider 主要负责管理和分享跨不同应用程序之间的数据资源。借助此机制,开发者能够安全有效地与其他应用交换信息而不必担心底层数据库结构等问题。 - **主要职责**: - 将本地存储的数据暴露出去以便外部查询; - 支持增删改查 (CRUD) 操作; - 对敏感字段实施权限控制措施。 - **实现步骤**: - 创建子类继承自 `ContentProvider`; - 注册到项目配置文件中; - 利用 `ContentResolver` 来获取所需记录集。 ```java public class CustomContentProvider extends ContentProvider { @Override public boolean onCreate() { // 初始化工作... return true; } @Override public Cursor query(Uri uri, ...) { // 执行查询语句... return null; } // 其他 CRUD 接口... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值