Android四大组件详解

本文详细介绍了Android开发中的四大核心组件:Activity、Service、BroadcastReceiver和ContentProvider的功能与使用方法,包括它们之间的通信机制、生命周期及启动模式。

Android四大组件分别是:Activity,Service(服务),BroadcastReceiver(广播接收器),ContentProvider(内容提供者).


一.Activity:

Activity就是应用程序的一个界面,直接与用户交互并且接收用户操作去做出相应的响应.

Activity之间通过Intent进行通信.

使用Activity之前必须要在AndroidManifest.xml中进行注册,否则使用的话程序会不识别该Activity.

所有的运行的Activity都是保存在Activity栈里,Activity栈是由后进先出的规则,当你进入一个Activity,就把该Activity加入到栈顶,当你返回时就是把栈顶的Activity弹出.

Activity的加载模式有4种分别是: standard,singleTop,singleTask,singleInstance.加载模式可以在AndroidManifest.xml中的Activity节点设置launchMode.

standard模式:没设置的话默认就是standard,该模式就是每运行一个Activity就会产生一个新的实例.

singleTop模式:如果跳转一个Activity,栈顶已经存在这个Activity的实例的话,就会调用onNewIntent()不会重新创建实例.(栈顶就是你刚才操作的页面,比如A页面->B页面->C页面->C页面,这种情况就会调用C页面的onNewIntent(), 如果是A页面->B页面->C页面->B页面的话,这种情况还是再次创建B页面的实例.)

singleTask模式:这个模式下跟singleTask差不多,不过这个模式比较开放,Activity栈里只允许存在一个实例,就是跳转一个Activity,如果在Activity栈里已经有了该实例,那么就调用onNewIntent()不会重新创建实例.

singleInstance模式:这个模式用的很少,比较霸道,在这个模式下的Activity的Task中,不允许有其他实例了.

Acitivty的生命周期:

光看图片有点蒙可能,举例说明:

进入应用启动aActivity那么会依次调用onCreate()->onStart()->onResume() 那么现在aActivity现在就是正在运行状态,如果接收用户点击跳转到bActivity,那么会先调用aActivity的onPause()方法暂停,然后bActivity再依次调用onCreate()->onStart()->onResume() ,之后会调用onSaveInstanceState() (注:这个方法不在生命周期里,只是在Activity可能 会被系统杀死时,为了不让程序出现错误保存当前的状态,也就是使用Bundle保存重要变量,如果被杀死,再次返回时候 再次调用onCreate(Bundle),可以使用参数取出保存的状态) , 之后会调用aActivity的onStop()方法,这时如果用户点击返回,会先调用bActivitiy的onPause(),然后调用aActivity的onRestart()->onStart()->onResume(),然后调用bActivity的onStop()->onDestroy()方法销毁bActivity.


二.Service:

字面意思是指服务,说白了就是一个没有界面的Activity,相当于后勤,是在后台完成某种指定操作.

Service的启动方式有两种:

startService(开始服务):组件调用startService().

bindService(绑定服务):组件掉用bindService().

那么两种方式的区别是:

start: 组件掉用startService(),这时service会调用onStartCommand(),当service启动后,他的生命周期和启动它的组件就没有关系了,是自生自灭自己做事情,可以一直在后台运行下去,除非自己执行完任务自杀(在service里面调用stopSelf()),或者被杀(组件掉用stopService()).

bind:组件掉用bindService(),会返回给调用者一个IBind接口,调用者可以通过这个接口调用Service里面的方法,也就是调用者命令Service做什么事情,这是给调用者和Service牵上了红线,只要调用者GG了,那么Service也得殉情GG.

Service使用必须要在AndroidManifest.xml中注册使用(例如<service name="xx.xxx.xxx.MyService"></service>).

Service的生命周期是:

通过startService启动的是onCreate()->onStartCommand()->Service运行

  销毁则是调用stopService()时  ->onDestroy().

通过bindService启动是 onCreate()->onBind()->Service运行

调用者GG以后 onUnBind()->onDestroy.

三.BroadcastReceiver.

用于接收广播,也就是你想要监听的东西比如说网络的连接成功啊,来电话了啊,开机了啊,还可以自定义,然后发送广播啊...等等. 

广播分为2类:一种是正常广播(sendBroadcast()),是完全异步的,就像赛跑一样,谁跑的快谁先接收.第二种是有序广播(sendOrderedBroadcast),有序就是有顺序的就像买票一样,我买完你再买,也可以我买完关门,就是receiver执行完之后终止传播,receiver运行顺序可以通过intent-filter里面的priority来控制,如果priority相同时,就抢吧.

BroadcastReceiver生命周期就是onReceive方法,函数执行完就GG. BroadcastReceiver不能执行耗时操作他只存在10秒,而且他没有提供任何界面来显示广播信息,一般都是使用NotificationManager来发送通知并且震动.

广播注册的方式也有两种:

1.代码动态注册:context.registerReceiver()这样注册要在组件销毁时调用unRegisterReceiver()解除.

2.配置文件AndroidManifest.xml注册: 这种的会随系统的启动而活跃,只要接受到广播就会触发,就算程序没运行.


四.ContentProvider.

主要用于数据的共享.通过他把数据提供给别的应用程序使用,Android中有些系统的ContentProvider例如联系人,图库等.

主要使用方法是.

提供者实现ContentProvider去实现增删改查

接收者实现ContentResolver去调用Provider提供的数据


调用时是使用Uri来定位,使用content://开头,以表示数据是由ContentProvider来管理的,没怎么使用过,就用来获取了图库什么的.


四大组件就到这里,都是理论,具体还是要在代码里面自己领悟,用多了就理解了.

         

### 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、付费专栏及课程。

余额充值