Android四大组件

整理一下Android的四大组件的生命周期吧,参考书目:《第一行代码》

Android四大组件
  • Activity
  • Service
  • BroadcastReceiver
  • ContentProvider

    Activity的生命周期:
    Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称为返回栈(Back Stack)。栈是一种后进先出的数据结构,在默认的情况下,每当启用了一个新的活动,他会在返回栈中入栈,并处于栈顶的位置。而每当按下Back键或调用finish()方法去销毁回一个活动时,处于栈顶的活动会出栈,这时前一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。

如图展示了返回栈是如何管理活动入栈出栈的操作的:
这里写图片描述

活动的生存期:

  • onCreate():在活动第一次被创建的时候调用,在这个方法中完成活动费初始化操作,如加载布局,绑定事件等。
  • onStart():在活动欧不可加变成不可见的时候调用。
  • onResume():在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。
  • onPause():这个方法在系统准备去启动或者恢复另一个活动的时候调用。通常会在这个方法中将一些消耗GPU的资源释放掉,以保存一些关键数据。
  • onStop():这个方法在活动完全不可见的时候调用。他和onPuse()方法的区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法不会执行。
  • onDestroy():这个活动在被销毁之前调用,之后活动状态将变为销毁状态。
  • onRestart():这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

流程示意图:
这里写图片描述

Service的生命周期
当一个项目的any where 调用了Context的startService()方法,相应的服务就会启动起来,并回调onStartCommand()方法。如果服务未创建则onCreate()方法先于onStartCommand()方法执行。服务启动后会一直保持运行状态,一直到stopService() / stopSelf()方法被调用。*虽然每调用一次startService()方法,onStarCommand()就会执行一次,但实际上每个服务都只会存在一个实例。所以,不管调用了多少次startService()方法,都只需调用一次stopService()或stopSelf()方法服务就会停止下来了!
In addtion,还可以调用Context的bindService()方法来获取一个服务的持久连接,会回调服务中的onBind()方法。同理。若服务未创建,则onCreate()方法先执行。之后,调用方可获取到onBind()方法里返回的IBinder对象的实例。
调用了startService()方法后,再去调用stopService()方法,这时服务中的onDestroy()方法就会执行,表示服务已经销毁了。同样的,当调用了bindService()方法后,又去调用unbindService()方法,onDestroy()方法也会执行。
当对一个服务既调用了 startService() 方法,又调用了 bindService() 方法时,要同时调用stopService() 和 unbindService()方法才会执行。
示意图:
这里写图片描述

BroadcastReceiver的生命周期:
生命周期只有十秒左右,如果在onReceive()内超过十秒内的事情,就会报:Application No Response程序无响应的错误信息,他的生命周期从回调onReceive()方法开始到该方法返回结果后结束。
ContentProvider的生命周期:
创建ContentProvider的步骤:

  • onCreate():初始化内容提供器时使用。通常会在这里完成对数据库的创建和升级等操作,返回true表示内容提供器初始化成功,返回false则表示失败。
  • query():从内容提示器中查询数据。使用uri参数来确定查询那张表,projection参数用于确定查询哪些列,selection和selectionArgs参数用于约束查询哪些行,sortOrder参数用于对结果进行排序,查询的结果放在Cursor对象中返回。
  • insert():更新内容提供器中已有的数据。使用URI参数来确定要添加的表,待添加的数据保存在values参数中。
  • update():更新内容提供其中已有的数据,使用URI参数来确定更行哪一张表中的数据,新数据保存在values参数中,selection和selectionArgs参数用于约束删除哪些行,被删除的行数将作为返回值返回。
  • getType():根据传入的内容URI来返回相应的MIME类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值