【Android】Android 01 基础
Android 是一个开源的,基于 Linux 的移动设备操作系统。Android 编程是基于 Java 的,因此理解 Java 将利于更好得进行 Android 应用程序开发。
1 四大组件
1.1 Activity
- 启动模式
- 标准模式(standard):可以有多个相同的实例,也允许多个相同 Activity 叠加。
- 栈顶复用模式(singleTop):可以有多个实例,但是不允许多个相同 Activity 叠加。如果 Activity 在栈顶,启动相同的 Activity,不会创建新的实例,而会调用其 onNewIntent 方法。
- 栈内复用模式(singleTask):只有一个实例。在同一个应用程序中启动 Activity,若 Activity 不存在则会在当前 task 创建一个新的实例,若存在则会把 task 中在其之上的其它 Activity destory 掉并调用它的 onNewIntent 方法。
- 单例模式(singleInstance):只有一个实例,并且这个实例独立运行在一个 task 中,不允许有别的 Activity 存在。
- 生命周期
- 完整生命周期:完整生命周期始于
onCreate()
方法回调,止于onDestroy()
方法回调onCreate()
生命周期的第一个方法,表示 Activity 正在创建/启动onDestroy()
生命周期的最后一个方法,表示 Activity 即将被销毁
- 可见周期:可见周期始于
onStart()
方法回调,止于onStop()
方法回调onStart()
Activity 可见时调用,此时 Activity 尚未处于前台onStop()
Activity 由可见到不可见时回调此方法onRestart()
该方法触发的前提是 onStop 方法被调用
- 前台周期:前台周期始于
onResume()
方法回调,止于onPause()
方法回调onResume()
该方法的回调标识 Activity 处于前台onPause()
Activity 即将进入后台时回调此方法
- 完整生命周期:完整生命周期始于
1.2 Service
服务是Android中实现程序后台运行的解决方案,服务依赖于创建服务时所在的应用程序进程。分为本地服务和远程服务。
生命周期:服务的整个生命周期从调用 onCreate() 开始起,到 onDestroy() 返回时结束。
- 绑定模式:从调用 bindService() 开始,执行的方法依次为 onCreate()、onBind(),解除绑定的时候依次执行 onUnbind()、onDestory()。
- 非绑定模式:从调用 startService() 开始,执行的方法依次为 onCreate()、onStartCommand(),Service 关闭的时候调用 onDestory()。
1.3 BroadcastReciver
主要用于对广播消息(Intent)的过滤并响应的控件。可以理解为全局的监听器。
生命周期:广播接收者的生命周期非常短暂的,在接收到广播的时候创建,onReceive() 方法结束之后销毁。
类型
- 有序广播:按照被接收者的优先级顺序,在被接收者中依次传播,每个对象有权终止广播。
- 无序广播:完全异步,逻辑上可以被任何广播接收者接收到。优点是效率较高。缺点是一个接收者不能将处理结果传递给下一个接收者,并无法终止广播 intent 的传播。(标准广播)
注册方式
- 静态广播:不管应用程序是否处于活动状态,都会进行监听。每次触发都会建立新的 Receiver 对象。
- 动态广播:代码中进行注册,然后添加不同的 Action。动态注册的广播一定要取消注册,在 onDestroy() 方法中调用 unregisterReceiver()。
发送广播: 发送广播前,要先定义一个接收器,先确定目标,然后再发送。
1.4 ContentProvider
ContentProvider 是应用程序之间共享数据的接口,进程间进行数据交互和共享,即跨进程通信。ContentProvider 的底层是采用 Android 中的 Binder 机制。
- 统一资源标识符(URI)
- MIME 数据类型:多功能 Internet 邮件扩充服务
使用的时候首先自定义一个类继承 ContentProvider,然后覆写 query()、insert()、update()、delete()、onCreate()、getType() 方法。
2 UI控件
2.1 View
View 是用户接口的基础构件,Android 应用的所有 UI 组件都是继承了 View 类。表示屏幕上的一块矩形区域,负责绘制这个区域和事件处理。View 默认为可见的,不是默认值时先调用 onVisibilityChanged()。
分类
- View
- 继承 View 重写 onDraw()
- 继承特定的 View:TextView、Button、EditText、Progressbar、ImageView
- ViewGroup
- 继承 ViewGroup 派生特殊的 Layout
- 继承特定的 ViewGroup:LinearLayout、RelativeLayout、ConstraintLayout 等
View 生命周期
- Creation(创建):
onFinishInflate()
- Layout(布局)
onMeasure(int, int)
onLayout(boolean, int, int, int, int)
onSizeChanged(int, int, int, int)
- Drawing(绘制)
onDraw(android.graphics.Canvas)
- Event processing(事件处理)
- Focus(聚焦)
- Attaching(附用)
onAttachedToWindow()
onDetachedFromWindow()
主要组件
- MotionEvent:当手指触摸屏幕时,将产生 Touch 事件。Touch 事件的相关细节被封装成 MotionEvent 对象。
- TouchSlop:系统所能识别出的被认为是滑动的最小距离
- VelocityTracker:速度追踪,用于追踪手指在滑动中的速度
- GestureDetector:手势检测,用于辅助检测用的单击,滑动,长按,双击等行为
View 的滑动
- scrollTo 与 scrollBy
- 改变布局参数 LayoutParams:重写 onTouchEvent()
- Scroller 类实现平滑滑动,本身并不能实现滑动,需要配合 View 的 computeScroll() 方法,不断的让 View 重绘
- startScroll() 开启平滑移动过程
- computeScrollOffset() 判断是否完成了滑动
- getCurrX() 和getCurrY() 获取当前滑动坐标
- 继承已有的 View
- 重写 onMeasure()
- 用 getMeasuredWidth() 和 getMearsureHeight() 获取测量到的尺寸
- 计算出最终要的尺寸
- setMeasuredDimension(w, h) 保存结果
- 完全自定义 View
- 重写 onMeasure()
- 计算出自己的尺寸 MeasureSpec.getSize(widthMeasureSpec); MeasureSpec.getSize(heightMeasureSpec);
- 用 resolveSize() 或 resolvesizeAndState() 修正结果
- setMeasuredDimension(w, h) 保存结果
- 自定义 Layout:重写 onMeasure()、onLayout()
RecyclerView 是 Google 推出用来代替 ListView 组件的。RecyclerView 强制使用了 ViewHolder,直接把 viewholder 的实现封装起来,用户只要实现自己的 viewholder 就可以了,该组件会自动帮你回收复用每一个 item。
2.2 Menu
分类
- 选项菜单 OptionMenu
- 上下文菜单 ContextMenu
使用
- 在xml文件中定义布局文件
- 重写 onCreateOptionsMenu() 或 onCreateContextMenu(),创建目录
- 重写 onOptionsItemSelected() 或 onContextItemSelected(),响应目录的点击事件
3 Adapter
使用 ListView 需要三个元素:
- ListView 控件:展示每条数据的框架;
- Adapter 适配器:连接数据与展示 ListView 的中介,通知 View 绘制多少 View,每条 View 怎么绘制,View 内部事件如何响应;
- 数据:具体被映射的字符串、图片、状态等信息,有特定的格式要求,具体视 Adapter 实现而定;
Adapter
接口
ListAdapter
接口:连接 ListView 和数据SpinnerAdapter
接口BaseAdapter
抽象类,实现自 ListAdapter 接口和 SpinnerAdapter 接口ArrayAdapter<T>
:用于显示一行文字SimpleAdapter
:可以展现很多种数据,默认只允许显示 Checkable、TextView、ImageView 的数据CursorAdapter
自定义 Adapter
4 安卓通信机制
进程通信方式
- Bundle - 四大组件间的进程间通信
- 文件共享 - 交换简单的数据,对实时性要求不高
- ContentProvider - 一对多的进程间数据共享
- BroadcastReceiver - 一对多的低频率单向通信
- Socket - 网络间的数据交换
- 标准 Java 接口(java.NET)
- Apache 接口(org.apache.http)
- Android.net 网络接口