Android 四大组件、五大存储、六大布局:
参考链接:https://www.cnblogs.com/tsingke/p/9007563.html
四大组件:
活动(activity)、
服务(service)、
内容提供者(Content Provider)、
广播接收器(Broadcast Receive)。
活动应用程序是显示层,每一个画面对应于你的应用程序服务,服务应用程序中不可见的工人,而内容是指提供共享的数据储存,用来管理和共享应用程序的数据库,广播接收器是指广播的接受者。
①Activity(活动):
Activity 是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity 可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!
Activity 用于显示用户界面。用户通过 Activity 交互完成相关操作;一个 App 应用允许多个 Activity。
Activity 的概念和其生命周期图:
Activity 生命周期大多是成对出现的:
onCreate() 和 onDestroy(),生命的起始与终结;
onStart() 和 onStop(),界面的可见与否;
onResume() 和onPause(),是否可进行交互。
详细介绍:
onCreate():
扫描二维码关注公众号,回复: 16446224 查看本文章第一个调用的方法,通常在该方法中加载布局文件、初始化资源、注册事件与 BroadcastReceiver 等较重的任务。
onStart():
在 onCreate() 方法后调用,通常在该方法中处理 UI 的显示控制逻辑,任务不可过重,用户此时无法交互也无法直接看见当前 Activity。
onResume():
在 onStart() 方法后调用,通常在该方法中进行简单的数据处理与UI控制,如开始动画,只执行轻量任务,方法执行后用户可进行交互并可直接看见当前 Activity。此时,当前 Activity 进入 Resumed 状态(运行状态),当一个 Paused 状态的 Activity 重新位于栈顶时(从其他 Activity 返回),会再次调用该方法。onPause():
当前 Activity 被其他 Activity 覆盖时调用,让当前 Activity 进入 Paused 状态(暂停状态),此时当前 Activity 可见但不可交互。通常在此方法中进行简单的数据处理与 UI 控制,如暂停动画,只执行轻量任务。内存不足且无其他优先级更低的 Activity 时,当前 Activity 可能会被销毁。当前 Activity 重新位于栈顶时(从其他 Activity 返回),会调用 onResume() 方法。
onStop():
当前 Activity 被其他 Activity 完全覆盖(若上层 Activity 透明或半透明时,只调用 onPause() 方法)时调用,当前 Activity 进入 Stopped 状态(停止状态),当前 Activity 不可见。通常在此方法中处理 UI 的显示控制逻辑,任务不可过重。内存不足且无其他优先级更低的 Activity 时,当前 Activity 可能会被销毁。还行当前 Activity 重新位于栈顶时(从其他 Activity 返回),会调用 onRestart() 方法。
onRestat():
当一个 Stopped 状态的 Activity 被返回时,该方法被调用,之后再调用 onStart() 方法和 onResume() 方法进入运行状态。
onDestroy(): 当前 Activity 被销毁时调用,通常在该方法中用来执行释放资源等较重的任务。
Activity 的创建流程:
启动一个 Activity 的几种方式:
Activity 的四种加载模式图解:
详情介绍:
Standard:标准模式,Activity 的默认启动模式。在这种模式下, Activity 可以有多个实例,每次启动 Activity,无论任务栈中是否已经存在这个 Activity 的实例,系统都会创建一个新的 Activity 实例。
SingleTop:栈顶模式,栈顶 Activity 复用的模式。当一个 SingleTop 模式的 Activity 已经位于栈顶时,再去启动它则不再创建新的实例;如果不在栈顶,无论任务栈中是否已经存在这个 Activity 的实例,系统都会创建一个新的 Activity 实例。
SingleTask:单任务模式,栈内 Activity 复用的模式。如果启动的 Activity 已经存在于任务栈中,则会将此 Activity 上层的其他 Activity 出栈,使此 Activity 位于栈顶;否则创建一个新的 Activity 实例。
SingleInstance:单实例模式。在该模式下,系统会启动一个新的栈来管理该 Activity,不同应用之间可以共享该 Activity。
②Service (服务):
概念:
Service 直译为“服务”,主要用于在后台处理一些耗时的逻辑,或者执行一些需要长期运行的任务。必要的时候,甚至可以让服务在程序退出的情况下继续运行。
作用:
承担大部分的数据处理工作,为其他组件提供繁重耗时的后台服务,可监控其他组件的运行状态。
Service(服务)的生命周期图:
使用Service 相关方法详解:
③ContentProvider(内容提供者):
概念:
ContentProvider 直译为“内容提供者”,主要用于共享本应用的数据给其他应用使用,根据此特性也可将 ContentProvider 用于进程间通信。提供数据的应用注册 ContentProvider,获取数据的应用创建 ContentResolver 获取对应 ContentProvider 的数据。
作用
Content Provider 使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过 ContentResolver 类从该内容提供者中获取或存入数据。开发人员通常不会使用 ContentProvider 类的对象,大多数是通过 ContentResolver 对象实现对 ContentProvider 的操作。
自定义 ContentProvider:
通过 ContentObserver 监听 ContentProvider 的数据变化流程:
④BroadcastReceiver(广播接收者)
概念:
BroadcastReceiver 直译为"广播接收者”,主要用来接收来自系统和应用中的广播。在 Android 系统中,广播体现在方方面面,例如开机广播、网络状态广播、电池电量广播等等。
作用:
广播可以用于异步处理消息,此时作用类似于 Handler,比 Handler 更强大的是广播可以在整个设备内互通消息,基于这个特性可以用来解决进程间通信的问题。
两种广播类型:
两种注册广播的方式:
五大存储:
SharedPreferences、
文件存储、
SQLite 数据库方式、
内容提供者(Content Provider)、
网络
六大布局:
线性布局(LinearLayout)、
框架布局(FrameLayout)、
表格布局(TableLayout)、
相对布局(RelativeLayout)、
绝对布局(AbsoluteLayout)、
网格布局(GridLayout)
①LinearLayout(线性布局):
线性布局是按照水平或垂直的顺序将子元素(可以是控件或布局)依次按照顺序排列,每一个元素都位于前面一个元素之后。线性布局分为两种:水平方向和垂直方向的布局。分别通过属性 android:orientation=“vertical” 和 android:orientation=“horizontal” 来设置。 android:layout_weight 表示子元素占据的空间大小的比例。
属性:
orientation:用来指定当前的线性布局的排布方向。
horizontal:水平横向
vertical:垂直纵向
wrap_content:包裹内容
match_parent:匹配父类
margin:外边距
padding:内边距
gravity:表示控件的内部内容针对控件本身的对齐方式
layout_gravity:表示该控件自身在父类布局中的对齐方式
layout_weight:表示权重的概念,即该百分比的形式进行对齐方式:
如果控件划分的区域为 wrap_content,那么权重值越大,所占比例就会越大;
如果控件划分的区域为 match_parent,那么权重值越大,所占比例就会越小。
注:如果线性布局排布方式为水平,那么 layout_gravity 在水平的方向上就不起作用,只能在垂直的方向上起作用。
显示特点:所有子控件按照横向或者竖向依次排列。
android:orientation=“vertical”(竖向),
android:orientation=“horizontal”(横向)。
常用属性:
①gravity(控件本身内的重心位置)常用值:
left(左)、right(右)、top(上)、bottom(下)、center(中心)、
enter_vertical(竖向中心)、center_horizontal(横向中心)
注意的是属性还可以这样使用 android:gravity=“bottom|center” 表示底部中心
②layout_gravity (控件在父容器内的重心位置)
常用值:
left(左)、right(右)、top(上)、bottom(下)、center(中心)、
enter_vertical(竖向中心)、center_horizontal(横向中心)
③layout_weight (权重值)
子控件的用法:android:layout_weight=“1” 多个控件同时使用,可以实现平分的效果
④weightSum(权重总和)
②FrameLayout(框架布局也称帧布局):
两个属性
andrid:foreground:设置改帧布局容器的前景图像;
andrid:foregroundGravity:设置前景图像显示的位置。
帧布局中的每一个组件都代表一个画面,用该布局可以实现动画效果
1.默认按照左上角(0,0)开始排布
2.在帧布局中定义的控件每一个都是以画面的形式进行呈现
3.最开始定义的控件出现在最下方那个,最后定义的控件出现在最上面。
注:帧布局可以使用在手机联系人的导航显示字母的呈现帧布局使用在帧动画。
显示特点:所有的子控件默认显示在 FrameLayout 的左上角,会重叠在一起显示。
常用属性:
layout_gravity (设置给子控件,调整控件在容器内的重心)
常用值:
left(左)、 right(右)、
top(上)、 bottom(下)、
center(中心)、 center_vertical(竖向中心)
center_horizontal(横向中心)
③TableLayout(表格布局):
属性:
stretchColumns:拉伸某一列,让布局显得不紧凑
shrinkColunms:回缩某一列,让整体的内容都得以呈现
collapseColumns:隐藏某一列
TableLayout属于行和列的形式的管理控件,每行为一个 TableRow 对象
TableLayout 不会生成边框
注:TableRow 的宽和高可以不指定,系统会自动给定对应的宽和高
表格布局和网格布局类似,但是需要注意的是,表格布局不能跨行,只能跨列
④RelativeLayout(相对布局):
按照空间之间的相对位置进行排布,存在一个参照物的概念。
属性:
centerInparent:位于父类的中部
alignParentRight:对齐父类的右方
alignParentLeft:对齐父类的左方
toRightOf:在某个控件的右方
toLeftOf:在某个控件的左方
alignBottom:底部对齐
alignTop:顶部对齐
alignRight:右对齐
alignLeft:左对齐
alignBaseLine:基准线对齐
显示特点:和 LinearLayout 布局相似,所有子控件默认显示在 RelativeLayout 的左上角
常用属性:
①在指定控件的哪一边:(注意:这些属性都需要有一个指定的id)
layout_toRightOf 在指定控件的右边
layout_toLeftOf 在指定控件的左边
layout_above 在指定控件的上边
layout_below 在指定控件的下边子控件对齐关系②指定和那个控件的对齐方式(注意:这些属性都需要有一个指定的id)
layout_alignRight 与指定控件右对齐
layout_alignLeft 与指定控件左对齐
layout_alignTop 与指定控件上对齐③子控件与父容器间对齐关系(这些属性的值为true或false)
layout_centerInParent 与父容器中间对齐
layout_centerVertical 与父容器竖向中心对齐
layout_centerHorizontal 与父容器横向中心对齐
layout_alignParentLeft 与父容器左边对齐
layout_alignParentTop 与父容器上边对齐
layout_alignParentRight 与父容器右边对齐
layout_alignParentBottom 与父容器下边对齐
⑤AbsoluteLayout(绝对布局):
又叫坐标布局,可以直接指定子元素的绝对位置
特点:这种布局简单直接,直观性强;使用中一般通过 Layout_x 和 Layout_y 来指定对应的控件存放的位置
缺点:不利于屏幕的适配
四大控制属性(单位都是 dp):
控制大小:
android:layout_width:组件宽度;
android:layout_height:组件高度;控制位置:
android:layout_x:设置组件的 X 坐标;
android:layout_y:设置组件的 Y 坐标。
⑥GridLayout(网格布局):
属性:
layout_columnSpan:扩展列的数目
layout_rowSpan:扩展行的数目
layout_gravity:填充方式(fill)
columnCount:存在多少列
RowCount:存在多少行
注:GridLayout 和 TableLayout 有什么不同?
TableLayout 定义 TableTRow 来呈现内容,GridLayout 中可以定义控件来直接使用;
表格布局中只能合并列,不能合并行,但是在网格布局中既能合并列也能合并行
显示特点:
所有子控件默认在 GridLayou t中横向依次排列,当只等每行的列数时,到达指定列数会自动换行显示。
常用属性:
layout_column 在网格的第几列
layout_row 在网格的第几行
layout_columnSpan 跨列
layout_rowSpan 跨行
layout_gravity 在一个网格中的重心位置
columnCount 每行列总数
- Android 中的六大布局还是建议使用:
LinearLayout(线性布局)的 weight 权重属性+ RelativeLayout(相对布局)来构建我们的界面更完美!
还有一些 UI 基本控件:文本框(TextView)、输入框(EditText)、按钮(Button)…
Note:
欢迎点赞,留言,转载请在文章页面明显位置给出原文链接
知者,感谢您在茫茫人海中阅读了我的文章
没有个性 哪来的签名!
详情请关注点我
持续更新中
© 2021 05 - Guyu.com | 【版权所有 侵权必究】 |