文章目录
1. 前言
android应用开发中离不开四大组件,这四个组件分别是:activity,service,brocastrecevier,contentprovider,下面将会对这四大组件的注册,启动,生命周期一一说明。
2. activity
activity即活动,主要负责展示用户界面。
2.1 注册
activity的注册是通过直接在AndroidManifest.xml文件中注册的:
<activity
android:name=".MainActivity"
android:screenOrientation="portrait" />
2.2 启动
activity的启动包含两种启动模式:
1.显式启动即显式声明具体的活动的名字直接启动,示例如下:
Intent intent = new Intent(this, DeviceListActivity.class);
startActivity(intent);
2.隐式启动即通过匹配action,category和data启动活动,示例如下:
Intent intent = new Intent("com.jrmf360.action.ENTER");
startActivity(intent);
ps:
action的匹配规则
action在Intent-filter可以设置多条
intent中必须指定action否则匹配失败且intent中action最多只有一条
intent中的action和intent-filter中的action必须完全一样时(包括大小写)才算匹配成功
intent中的action只要与intent-filter其中的一条匹配成功即可
2.3 生命周期
Activity的常用生命周期就只有如下7个:
onCreate():表示Activity正在被创建,常用来初始化工作,比如调用setContentView加载界面布局资源,初始化Activity所需数据等;
onRestart():表示Activity正在重新启动,一般情况下,当前Acitivty从不可见重新变为可见时,OnRestart就会被调用;
onStart():表示Activity正在被启动,此时Activity可见但不在前台,还处于后台,无法与用户交互;
onResume():表示Activity获得焦点,此时Activity可见且在前台并开始活动,这是与onStart的区别所在;
onPause():表示Activity正在停止,此时可做一些存储数据、停止动画等工作,但是不能太耗时,因为这会影响到新Activity的显示,onPause必须先执行完,新Activity的onResume才会执行;
onStop():表示Activity即将停止,可以做一些稍微重量级的回收工作,比如注销广播接收器、关闭网络连接等,同样不能太耗时;
onDestroy():表示Activity即将被销毁,这是Activity生命周期中的最后一个回调,常做资源回收工作;
ps:如果在这些生命周期里执行耗时操作,容易产生ANR,这个一定要注意!
3. service
service即服务,它与activity都是存在生命周期的,但不同的是service并不展示什么界面,可以也说它是没有界面的activity这也不为过。service更多是提供一个持续运行的程序的作用。
3.1 注册
服务的注册其实和活动的注册方式相同,都是在AndroidManife.xml文件中进行注册的,例子如下:
<service android:name=".MyService />
3.2 启动
服务也有两种启动方式,分别是startService和bindService
3.2.1 startService
调用方法:
startService(intent);
特点:
一旦服务开启跟开启者就没有任何关系;
开启者退出之后,服务还是可以在后台长期运行的。前提是没有调用 stopService(Intent);
开启者不能调用服务里面的方法
3.2.2 bindService
调用方法:
bindService(Intent service, ServiceConnection conn, int flasgs);
特点:
bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。
绑定者可以调用服务里面的方法。
3.3 生命周期
与活动不同的是,这里启动方式的不同会导致生命周期的改变。
3.3.1 startService
3.3.2 bindService
4. brocastrecevier
广播接收者,注册之后,就会主动监听广播消息并不需要启动。
4.1 注册
广播注册包含有静态注册方式和动态注册方式,静态注册方式其实跟活动和服务类似,都是在AndroidManifest,xml进行注册,而动态注册的话是在代码中进行注册的,这两种注册方式是有很大的区别的。
4.1.1 静态注册
广播的静态注册就是在AndroidManifest.xml文件中进行注册,静态注册的特点就是一经注册,它就会监听广播消息,并且它的生命周期不受程序的生命周期影响。
4.1.2 动态注册
广播的动态注册就是在代码中进行注册,它的特点就是能动态控制广播的注册与注销过程。
5. contentprovider
内容包含者,使用的场景,相对上面三个应用场景比较少,主要是用在进程间数据通信。