Android四大组件总结

一、四大组件简介

1.活动Activity

活动的生命周期
  • onCreate(): 第一次创建活动,在这里完成所欲常规静态设置:包括创建试图,将数据绑定列表中
  • onRestart():在活动onStop()之后调用,重新启动
  • onStart(); 活动对用户变得可见的时候,如果活动进入前台,后跟onResume(), 如果变为隐藏,后面紧跟着onStop()
  • onResume(): 活动开始与用户交互的时候调用,此时活动位于堆栈的顶部,并且有用户输入,后面紧跟onPause()
  • onPause(): 当系统即将开始恢复到以前的活动时候调用,暂停的活动不会接收用户输入,并且不能执行任何代码,如果活动返回到前面的时候,则跟随在onResume()之后,如果用户不可见的,则跟随onStop()
  • onStop(): 当活动对用户不再可见的时候调用,因为另一个活动已经恢复并且正在覆盖这个活动
  • onDestroy(): 在活动被破坏之前收到的最终调用
    在这里插入图片描述

2.Intent

  • 这是Android组件之间进行通信的一种方式
    • 显式意图:例如:new Intent(this. newActivtiy.class)
    • 隐式意图:例如:new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http:www.baidu.com"));
  • 意图解析
    • action
    • data
    • category

3.服务Service

  • 服务是一项长期运行的任务或流程,不需要和用户交互
  • 开始:通过调用startService进行启动,一旦启动,即使启动它的组件被销毁了,服务也会无限期的后台运行
  • 绑定:通过bindService(), 通过IPC跨进程调用来操作。
生命周期
  • onStartCommand(): 服务启动之后会调用这个函数,如果实现了这个功能,就应该通过调用stopSelf() 或者 stopService()来销毁它
  • onBind(): 另一个组件想要通过调用bindService()来与服务进行绑定,如果不允许绑定就实现该方法,返回null
  • onCreate(): 系统第一次创建这个服务的时候会进行调用这个方法来执行一次性的设置过程(处于onStartCommand()和onBind()之前)
  • onDestroy(): 服务不再使用的时候并被销毁的时候
    在这里插入图片描述

注意点:如果一个组件通过startService() (会有onStartCommand()方法的调用)来启动服务,则该服务将会保持运行状态,直到它停止使用stopSelf()或者另一个组件通过stopService()来停止它;如果一个组件调用bindService()来创建服务(并且不调用onStartCommand()),那么只要该组件绑定了服务,该服务就会运行起来,一旦服务从所有的客户端解除绑定,系统就会销毁它。

4.BroadcastReceiver

  • 广播
    • 有序广播:被广播接收器接受之后,可被终止,无法向下传递,例如:短信广播
    • 普通广播:发送到每一个已经注册的的广播接收器,无法被终止,例如:开机广播,蓝牙广播
  • 广播接收器
    • 静态注册广播:在AndroidManifest.xml中设置,程序不用启动也可以接收
    • 冬天注册广播:代码中注册广播,程序未启动的时候,无法接收广播。
      在这里插入图片描述

5.内容提供器ContentProvider

  • 跨APP,跨进程,共享数据的一款容器

6.对比

组件名主要作用什么时候使用逻辑实现
Actvitiy负责与用户交互的组件需要编写与用户交互的逻辑代码是一个window容器,内含getWindow方法
View用户所见即所得,一般绑定在Activity编写一个视图供给给用户操作是所有UI控件,容器控件的基类
Service运行在后台的服务,不需要与用户交互,一般提供各种功能功能服务,或称工具ContextWrapper的子类
BroadcastReceiver广播接收器接受设备内的广播,对此做出相应的业务反应类似于监听器
ContentProvider存储数据暴露给其他应用需要存储数据的容器数据库
ContentResolver读取数据从数据库读取数据数据库
IntentActivity\Service\BroadcastReceiver三种组件之间通信靠intent组件间传递消息NA
IntentFilter筛选项和上面Intent隐式用法相关NA

二、四大组件的启动

Activity的启动

1.startActivity
  • 通常使用startActivity函数来启动一个Activity
public void startActivity(Intent intent) {
	this.startActivity(intent ,null);
}

public void startActivity(Intent intent, @Nullable Bundle options) {
	...
	if (options != null) {
		startActivityForResult(intent, -1, options);
	else {
		startActivityForResult(intent, -1);
	}
}

pulic void startActivityForResult(Intent intent, int requestCode) {
	startActivityForResult(intent, requestCode, null);
}
2.startActivityForResult
public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
	if (mParent == null) { // 应用第一次创建Activity, 此时不存在父类的Activity
		options = transferSpringboardActivityOptions(options);
		Instrumenttation.execStartActivity(this, mMainTread.getApplicationThread(), mToken, this, intent, requestCode, options);
	else {
		if (options != null) {
			mParents.startActivityFromChild(this, intent, requestCode, options);
		} else {
			mParents.startActivityFromChidl(this, intent, requestCode);
		}
	}
3.Instrumentation.execStartActivity
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值