- 我将要敲的内容,没有代码,只有理论
- 以章节为单位做一个简洁的知识点汇总
- 没有勘误,错误难免,自行斟酌
0. 操作系统的概念
操作系统是计算机的一种系统软件,管理和控制计算机系统中的硬件和软件资源,为用户提供高效、可靠和安全的服务。
1. 操作系统的分类
(0)批处理操作系统
(1)分时操作系统
(2)实时操作系统
(3)个人计算机操作系统
(4)网络计算机 操作系统
(5)分布式操作系统
(6)嵌入式操作系统
2. 移动设备的特征
(0)内存
(1)中央处理器
(2)屏幕
(3)电池
(4)传感器
(5)摄像头
(6)网络通讯
是不是很眼熟的几个名词?因为大多数童鞋看手机都是看这几个地方嘛。
3. Android架构的组成?
(0)LInux Kernel(Linux 内核)
(1)Libraries(本地库)
(2)Android Runtime(Android 运行时)
(3)Application Framework(应用开发框架)
(4)Application(应用程序)
- 值得一提的是Android Runtime和Application Framework是同属中间层的
- 如果有考到了,嗯——注意一下……
- 如果问到它分几层,请自行权衡如何作答。
4. Android的特点
(0)开放源代码
(1) 应用广泛
(2)可扩展性强
(3)硬件调用
(4)开发方便
。。。听说期末考试不考。。。咱们跳过吧。。。
听哪一个说的?听命题姐姐说滴!!!
0. Java中包名的命题规范
噼里啪啦——劈里啪啦——批里啪啦(用手敲键盘的声音代替不想敲的反例)
书上说了辣么多,其实就一句话:
小写字母没空格,数字不当排头兵!
1. Android工程目录结构
。。。嗯。。。太多了。。。不想赘述
首先且最重要的是清单文件
这里说的清单文件是指:AndroidManifest.xml文件,它提供有关当前应用的基本信息。
- 声明应用的Java源代码包名,包名非常重要,它是应用的唯一标识符
- 描述应用中的组件,即X……X(用X来代替Android的四大组件)
- 声明应用必须具备的权限,例如读取SD card的权限
- 声明应用所需的最低Android API级别
- 声明应用的安全控制和测试等信息
下面是一张需要你自己脑补的清单文件实例图片
。。。
然后是R.java 文件
不知道同学们在写代码时有没有遇到过这种情况呢?
Button button=(Button) this.findViewById(R.id.button);
String name = this.getResources().getString(R.string.app_name);
- 通过这个实例我们可以清楚的看出R.java的作用:
- 通过R.java文件访问res目录中的资源文件。因为在R类中有很多静态类,且静态类的名字都与res中的一个目录名字对应,就像资源字典大全,包含了用户界面、图像、字符串等对应于各个资源的标识符,R类定义了该应用中所有资源的索引。
最后但同样重要的是.java文件与.xml文件
有这样一句老生常谈:.java定义逻辑
而.xml定义界面
何解?
- java控制应用的行为,比如你在指点屏幕后页面的变化;
- xml控制应用的样子,比如一个控件的颜色,比如一个界面的颜色等等。当然界面也可以通过.java中的代码实现,但不如.xml浪个撇头。
我们这里来复习两种方式
0. 使用DDMS帮助调试程序
通过“音乐播放器”的实例,相信大家对DDMS已经很熟悉了。
(0)设备列表
看图你就明白了。下面又是一张需要自行脑补的图片。
(看什么图?看了就能记得住?)
(1)文件浏览器(File Explorer)
我用意念变了一张图,你看见了没?
(2)日志(LogCat)
请记住,LogCat提供的6个级别的日志输出信息(级别逐渐升高)
Verbose。啰唆模式,
它会输出所有调试信息。程序中使用Log.v()
输出Debug。调试模式,
输出自己及比其级别高的信息(不含Assert)。程序中使用Log.d()
输出Info。信息模式,
输出自己及比其级别高的信息(不含Assert)。程序中使用Log.i()
输出Warn。警告模式,
输出自己及比其级别高的信息(不含Assert)。程序中使用Log.w()
输出Error。错误模式,
输出信息只包括 ERROR级别。程序中使用Log.e()
输出Assert。断言模式,
当程序中断言失败抛出异常,输出日志信息
1. 使用ADB帮助调试程序
记住,ADB全名是 : Android Debug Bridge
所以它起到了一个“桥”的作用。
2. 我们这里再补充一个点
Android 提供的一系列辅助系统开发工具
这里不展开,童鞋把上面这行字复制了去搜搜就有了
0. Android界面的组成与构建
(0)视图
(1)视图组
- 视图组,一般是由多个视图组成的复杂视图(它也是一个视图喔)。同样地,它也继承了View类。
- 视图组,是高级控件和布局的父类。类似地,我们可以画出一个“上图”来(略)。
(2)视图树
- 你看我画的图,像树吗?这样说,应该很容易理解了。
- 好,这里就不展开了。
(3)MVC模式
- 即 Model-View-Controller(模型-视图-控制器) 模式
- Model 代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
- View 视图代表模型包含的数据的可视化。
- Controller 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
- 这里不方便展开,可自行搜索
1. 事件处理模型
(0)三个概念
事件源
:事件发生的场所,通常就是各个控件。事件
:用户在界面上的操作的描述,可以封装成一个类的形式出现。但是并非所有的事件都被封装成为一个类,如Button单击事件。事件处理者
:接收事件对象并对其进行处理的对象,事件处理一般是一个实现某些特定接口类创建的对象。
(1)三种事件处理方法
0. 基于监听
a. 活动作为事件监听器
b. 内部类事件监听器
c. 匿名内部类事件监听器(代码可读性差)
( 以下为补充内容)
d. 通过设置UI组件的android:onClick属性,然后利用代码实现方法
e. 外部类
1. 基于回调
1). 自定义View类,继承自需要的View UI类。
2). 重写回调函数,如public boolean onTouchEvent(MotionEvent event)
2. Handler消息处理
具体内容这里就不赘述了,详情可查看我以前发过的PowerPoint文件
通过不断的实例作业,我想同学们对基本的布局类已经很熟悉了吧。
记住,7种基本布局类
- 帧布局
- 线性布局
- 绝对布局
- 相对布局
- 表格布局
- 网格布局
- 扁平化布局(补充)
值得一提的是,绝对布局具有一定刚性。
0. 按钮
a. Button
显示文本
b. ImageButton
显示图片
c. ToggleButton
显示两种状态(文本可修改),默认显示OFF或ON所以又叫开关按钮
1. 标签
即 TextView ,只能读不能修改。
一般用于显示一些信息。
2. 文本框
即 EditText,用来收集输入文本信息与展示文本信息。
注意,它只有下边框。
3. 单选按钮
又叫收音机按钮
a. RadioButton
b.RadioGroup
是一个视图组,是单选按钮的容器。把若干个RadioButton放到同一个RadioGroup中,才能产生互斥效果,达到“单选的目的”。
4. 复选框
即CheckBox,与单选框对应着的,一次可以选择多个选项。
5. 进度栏
即Progress Bar, 反馈后台任务是否正在处理和处理的进度。
6. 拖动栏
SeekBar,可以拖动的进度栏呗。
值得一提的是,拖动栏可以有两层进度栏。常用来显示缓存的进度。
0.列表类控件
三要素
- 控件
- 适配器(Adapter)
- 数据源
适配器
适配器是控件和数据源之间的“桥梁”作用,将不同形式的数据源绑定到控件上。
适配器的种类很多,比如:
- 数组适配器(ArrayAdapter)
- 数据库适配器(CursorAdapter)
- Map集合适配器(SimpleAdapter)
- 自定义适配器(BaseAdapter)
两种常用的列表类型控件
- Spinner
分,下拉风格(dropdown)和对话框风格(dialog)- ListView
带,文字和图片
1. Toast
- 文本类型
- 图片类型
- 复合类型
注意
show(),表示显示这个Toast消息提醒,当程序运行到这里的时候,就会显示出来,如果不调用show()方法,这个Toast对象存在,但是并不会显示,所以一定不要忘记。
2. 对话框
- 文本信息对话框
- 简单列表对话框
- 单选列表对话框
- 复选列表对话框
- 复杂布局对话框
- 进度条对话框
关于对话框和Toast,有一点,我们这里不得不提:
- Toast 没有焦点,而且显示的时间有限,不需要用户干预
- 对话框没有时间限制,但需要用户干预
3. 操作栏和菜单
0. 活动概述
活动中能够包含若干个视图,它是一个视图的“容器”或“载体”。
创建活动
a. 编写相应的组件类
b. 在AndroidManifest.xml文件中注册
活动的生命周期
运行状态
:活动进入前台,位于栈顶,此时活动处于运行状态。暂停状态
:其他活动进入前台,当前活动不再处于栈顶,但仍然可见只是变暗。停止状态
:当活动不再处于栈顶,被其他活动完全覆盖,不可见时,此活动处于停止状态。
七种方法与三个嵌套循环
- onCreate()
- onStart()
- onResume()
- onPause()
- onStop()
- onRestart()
- onDestroy()
不难看出,除了onRestart()外,其它6中方法都是两两相对的。于是,有了:
- 整个生命周期循环。发生在onCreate()和onDestroy()的调用之间。
- 可见生命周期循环。发生在onStart()和onStop()的调用之间。
- 前台生命周期循环。发生在onResume()和onPause()的调用之间。
1. 多活动之间的跳转
2. 活动任务与返回栈
前面复习“活动的生命周期”的时候已经提到过了,辣么——
Android 是如何对Activity 进行管理的咧?
Android 中的“任务”通过一个返回栈
管理这些活动,运行中的活动处于返回栈的栈顶。
0. 碎片的生命周期
三种状态
运行状态
:碎片所在活动处于运行状态,当前碎片可见,可以获得焦点,内容会高亮显示。暂停状态
:碎片所在活动处于暂停状态,暂停状态的碎片不能获得焦点,碎片中的内容会变暗。停止状态
:碎片所在活动处于停止状态,此时对片处于停止状态。
11种方法
onAttach()
: 当碎片添加到活动,并与活动建立关联时调用。onCreate()
: 创建碎片式调用,可以用来初始化碎片。onCreateView()
: 系统会在第一次绘制碎片相关视图时调用,返回值是碎片中的相关视图。onActivityCreated()
: 当碎片所在活动被创建完成,碎片相关视图也创建完成时调用该方法。- onStart(): 当碎片所在的活动从不可见变为可加,但是还是暗色,不能获得焦点,不能接收用户事件。此时调用该方法。
- onResume():当碎片所在的活动从暗色可见变为高亮可见,活动可以获得焦点,接收用户事件。此时调用该方法。
- onPause(): 当碎片从运行状态到暂停状态时调用该方法。
- onStop(): 当碎片从暂停状态到运行状态时调用该方法。
- onDestroyView(): 销毁碎片相关视图时调用。
- onDestroy():当碎片被销毁时调用。
onDetach()
:当碎片与活动接触关联是调用。
1. 碎片的创建步骤
- 创建碎片类
- 创建碎片布局文件
2. 添加碎片的两种方式
(0) 静态添加碎片到活动
通过标签包含到活动布局文件中。
(1) 动态添加碎片到活动
通过碎片事务FragmentTransaction实现,需重写onCreate()方法。
- 值得一提的是,静态添加碎片到活动的方法,并不能在运行期间动态删除和替换。
3. 碎片与活动之间的通信
。。。不晓得应该怎么说,干脆不说了。。。
何谓意图?
意图实际是一种消息机制。
0. 意图中包含的6个内容
- 目标组件(Component)
- 动作(Action)
- 数据(Data)
- 类别(Category)
- 附加数据(Extra)
- 标志(Flag)
1. 意图的两种类型
- 显试意图(Explicit Intent)
- 隐式意图(Implicit Intent)
提到了隐式意图,就不得不说一说,意图过滤器(Intent Filer)
- 隐式意图一般应用于不同应用之间的调用。在不同的应用之间,由于不能共用上下文对象,也不能引用目标组件的类,所以隐式意图请求要求提供意图过滤器。
- 意图过滤器(Intent Filer)
描述目标组件如何响应隐式意图。与显式意图请求不同,显式意图请求明确地指定了目标组件类名,而隐式意图请求没有指定目标组件的类名,它是通过意图过滤器告诉调用者如何能够找到匹配的目标组件规则。
记住,5种存储形式
- 文件系统
- SQLite 数据库
比较小,能装300—>500数据吧。
(0)特点
0. 开源
1. 嵌入式关系型数据库
2. 可移植性好
3. 易使用
4. 高效
5. 可靠
6. 弱类型(无数据类型)
(1)优点
0.跨平台
1. 资源占用率低
2. 独立性
3. 多元接口- 云服务(网络存储)
- Shared Preferences
- 内容提供者
正如前文提到数据存储方式和本章标题说的那样,内容提供者可实现共享数据。
0. 内容提供者的两个优点(目的)
- 实现共享数据
- 对底层细节进行封装
1. Content URI
例如,content://com.work.provider/Wdate/1289645040579
把它的组成部分搞搞清楚。
协议名字 + 权限 + 路径 + id
既然提到了 URI,就忍不住要说一下,URL
记住,
URI 的路径是一个逻辑地址
URL的路径是一个物理地址
2. 权限
- 普通权限
- 运行时权限
又称危险权限
0. 线程与进程
让我们先来复习两个概念。
- 进程
一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。
- 线程
是操作系统能够进行运算调度的最小单位。
再来明确二者的区别
- 线程是进程的一个组成单位
- 多线程都在进程的地址空间活动
- 资源被直接分配给进程,而不是线程
- 处理机调度以线程为基本单位
- 线程在执行过程中,需要同步
1. Android异步消息处理机制
- Message。消息,可以在线程之间传递,可以携带参数。
- MessageQueue。消息队列,一个可以容纳消息的队列容器。
- Handler。负责发送新消息到消息队列(MessageQueue)里面,在主线程接收消息(Message)更新UI。
- Looper。消息循环。
2. Handler发送消息方法
- send 方法
- post 方法
0. 服务的分类
- 启动类服务
松耦合- 绑定类服务
高耦合
启动类服务
三个方法
- onCreate()
- onStartCommand()
- onDestroy()
两个嵌套
- 整个生命周期循环
发生在,onCreate()和onDestroy()调用之间。- 有效生命周期循环
发生在,onStartCommand() 和onDestroy()调用之间。
绑定类型服务
四个方法
- onCreate()
- onBind()
- onUnbind()
- onDestroy()
两个嵌套
- 整个生命周期循环
发生在,onCreate()和onDestroy()调用之间。- 有效生命周期循环
发生在,onBind() 和onUnbind()调用之间。
1. 服务的创建
创建服务
a. 编写相应的组件类
b. 在AndroidManifest.xml文件中注册
有一点,不得不提。
“广播接收器”才是四大组件之一,不要简要写成“广播”,这是不对滴。
0. 广播分类
- 标准广播
- 有序广播
- 粘性广播
1. 广播接收器概述
广播接收器和服务被称为非UI组件或后台组件。
- 广播接收器的响应处理时间很短
- 服务的响应时间较长
2. 广播接收器的注册与发送
同样地,广播接收器的注册也分两种,即
- 静态注册
在AndroidManifest.xml中通过标签注册。
- 动态注册
在程序中通过registerReceiver()注册,通过unregisterReceiver()方法注销。
3. 通知
Notification
0. 音频文件
- 无损格式
非压缩数据格式,文件很大,一般不适合移动设备
如,WAV 文件- 有损格式
对于数据进行了压缩,压缩后丢掉了一些数据
如,MP3 文件,WMA 文件
1. 视频文件
- 本地视频
- 网络流媒体视频
如 AVI 文件(有损压缩),MOV 文件,WMV 文件,RMVB 文件,3GP 文件
2. 播放状态
。。。内容较多(但不是不重要)。。。不想敲。。。略了。。。
0. 通信技术
Socket 通信
HTTP 协议
记住它的特点
0. 简捷快速
1. 灵活
2. 无连接
3. 无状态,无记忆功能
4. 支持 B/S 和 C/S 结构- HTTPS 协议
- Web 服务
1. 数据交换方式
- 纯文本格式
简单,无格式- XML 格式
经典,灵活,重量级(相对JSON 格式)- JSON 格式
描述字符少,传输速度快,轻量级(相对XML 格式)
0. 使用百度地图
a. 申请 API Key
b. 获得 Android 签名证书中的 SHA1 值
c. 搭建和配置环境
1. 定位方式
- GPS定位
通过GPS卫星定位- 移动网络定位
通过移动运营商的蜂窝式移动电话基站或 WiFi 访问点实现定位。
Android动画技术
- 渐变动画
基于 Android 控件
a. 透明度渐变动画
b. 平移动画
c. 缩放动画
d. 旋转动画- 帧动画
基于本地文件
拨打电话功能
- 调出拨打电话界面
Uri telUri = Uri.parse(“tel : 1008611”);
Intent it = new Intent(Intent . ACTION_DIAL, telUri
);
startActivity(it);- 直接呼叫电话号码
Uri telUri = Uri.parse(“tel : 1008611”);
Intent it = new Intent(Intent . ACTION_CALL, telUri
);
startActivity(it);