安卓四大组件

简介

安卓的四大组件分别是Activity(活动),Service(服务),BroadcastReceiver(广播接收者),ContentProvider(内容提供者)。

Acitivity

活动(Activity)是一种包含用户界面的组件,主要用来和用户进行交互。

Activity的生命周期

先看一张图
图片来自互联网,可能与官方的不一样,但个人认为相对好理解点
当我们打开一个Acitivity的时候,会执行如下顺序:onCreate()->onStart()->onResume()
当我们关闭这个Activity的时候,则会执行:onStop()->onDestroy()

而关于onPause(),onRestart(),onStop()的情况则相对比较特殊,就以第一个Activity(FirstActivity)启动第二个Activity(SecondActivity)为例:FirstActivity的onPause()->SecondActivity的onCreate()(如果SecondActivity不是第一次创建则调用onRestart()方法)->onStart()->onResume()->FirstActivity的onStop();
注意是最后才调用第一个Activity的onStop()这样的设计是因为调用完FirstActivity的onStop()方法后FirstActivity就会不可见,而此时如果SecondActivity的一系列创建方法有失败的就会导致黑屏、闪退等用户体验不友好问题。
还有就是
先调用第一个Activity的onPause()再调用SecondActivity的onCreate()方法
,这其实很好理解,比如你在听音乐时来了电话,此时就会暂停音乐,也就是说调用onPause()来保存当前Activity的各种信息。

ps:(重写某个Activity的这些回调方法的时候需要首先在第一行调用基类Activity的相应的回调方法.比如super.onCreate(),super.onStart()等等)

Service

Service(服务)是实现程序在后台运行的解决方案。它依赖于创建服务所在的应用程序的进程,因此某个应用程序的进程被kill时,所有的依赖在该进程的service也会停止运行。

Service的生命周期

两种方式:startService()和bindService()。如图:

两种service启动方式的生命周期流程图,来自百度图片
第一种startService()->如果这个服务之前没有创建过则执行onCreate()->然后回调onStartCommand()方法->stopService()或stopSelf()->onDestroy().
第二种bindService()->同样的如果这个服务之前没有创建过则onCreate()先于onBind()执行->获取onBind()返回的IBinder对象->unbindService()->onDestroy().

ps:如果出现对一个服务既调用了startService()又调用了bindService()方法,这种情况如果想要销毁该service就必须同时调用stopService()和unbindService()方法。

BroadcastReceiver

BroadcastReceiver(广播接收器)是对发送出来的广播进行过滤并接受响应的一类组件。

广播机制

在安卓中,广播是一种广泛运用于应用程序之间传输信息的机制,主要可以分为:标准广播和有序广播。

标准广播(异步)发出后,所有的广播接收器几乎在同一时刻接收到该广播消息。
而发出有序广播(同步)后,同一时刻只有一个广播接收器接收到,当这个广播接收器的逻辑执行完后才继续传递。所以此时存在一种优先级,优先级高的广播接收器可以先收到广播消息并且这种在前面的广播接收器可以截断正在传递的广播。

注册广播

安卓中的广播机制很很灵活,广播接收者可以只对自己感兴趣的广播进行注册,这些广播可能是来自系统或其他应用程序的。
而注册广播的方式一般有两种:在AndroidManifest.xml(静态注册)、代码中注册(动态注册)。
动态注册灵活性很高,可以自由的控制注册和注销,但是必须要启动程序后才能接收到广播,因为Context.registerReceive()方法是写在onCreate()中的。而静态注册就不用担心广播接收器是否被关闭,就算程序未启动它所订阅的广播在触发时也会对其广播接收器起作用。

ContentProvider

ContentProvider(内容提供者)是不同程序之间进行数据交换的标准API。

Content Provider提供一个应用的指定数据集给其他的应用程序,如果想要实现程序共享功能,官方推荐就是使用它。一般步骤如下:
1.创建一个类继承ContentProvider,重写其六个方法。
2.借助UriMatcher这个类匹配内容URI,得到相应数据。
3.在Manifest.xml中注册provider。
4.其他应用通过ContentResolver来访问ContentProvider提供的数据。

其实使用ContentProvider,就是为了将存放在安卓上的数据以安全的方式封装,最终呢以统一的处理数据的接口让其它应用进程调用,从而实现数据共享。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值