前面几篇文章介绍了Camera1,Camera2,CameraView和CameraX的使用,对各个API的使用,应该问题不大,不过在真正开发过程中,也会遇到各种不同的问题,本篇文章继续介绍相机开发过程中遇到的问题,主要是相机预览、拍照尺寸,方向,以及图像数据的处理。
前面两篇介绍了Camera1和Camera2的使用,发现Camera API从1到2的变化非常大,Camera2的复杂度提升了不少,官方为了让我们更容易使用Camera,出了个一个官方的库cameraview。不过这个库已经Deprecated,官方建议使用Jetpack CameraX 替代。本篇文章就介绍下CameraView和CameraX的使用
上篇文章介绍了Camera1的使用,本篇介绍Camera2的使用。
Camera2(android.hardware.camera2)是从 Android 5.0 L 版本开始引入的,并且废弃了旧的相机框架Camera1(android.hardware.Camera)。
相比于Camera1,Camera2架构上也发生了变化,API上的使用难度也增加了。Camera2将相机设备模拟成一个管道,它按顺序处理每一帧的请求并返回请求结果给客户端。
Android Camera API和Android版本一样,也是碎片化比较严重,所以Google官方推出了CameraView,提供给开发者参考和学习,现在最新的可以使用Jetpack CameraX来开发,大大简化了开发的复杂度。本系列从Camera1->Camera2->CameraView->CameraX,一步步讲解Camera的进化过程,本篇先介绍Camera1的使用。
现在随着音视频的应用越来越多,直接使用系统原生相机进行拍照裁剪和拍视频,已经不能满足需求了。
需要通过Camera API进行自定义相机开发,满足一些复杂的业务场景,开篇先介绍Camera的基础知识,为后面Camera开发提供支持。
Java调用C/C++在Java语言里面本来就有的,并非Android独有的,即JNI。JNI就是Java调用C++的规范。
上一篇讲解了OKHttp,本篇来介绍下它的黄金搭档Retrofit,OKHttp+Retrofit是网络框架的不二之选。同是Square出品,和OKHttp融合起来非常简单。
Retofit是一个RESTful的HTTP网络请求框架,有以下特点:
- 基于OKHttp
- 通过注解配置网络请求参数
- 支持同步、异步请求
- 支持多种序列化、反序列化格式
- 解耦彻底、模块高度封装,使用很多设计模式来实现
前面介绍了网络的基础知识,这篇主要从OKHttp
源码角度来分析Http。
OKHttp是一个优秀的网络请求框架,有以下特点:
- 支持HTTP2/SPDY
- Socket自动选择最好路线,并支持自动重连
- 拥有自动维护的Socket连接池,减少握手次数
- 拥有队列线程池,轻松写并发
- 拥有Interceptors轻松处理请求与响应(比如透明GZIP压缩)
- 实现基于Headers的缓存策略
HTTP协议是无状态的,每次HTTP请求响应后,就会断开这次连接。如果客户端再次发送请求,服务端也不能识别出这个客户端是不是上次请求过的客户端,HTTP协议不能进行会话跟踪。而Cookie,Session,Token正是为了解决HTTP协议无状态问题。
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,在TCP/IP体系中属于最高层(应用层)是用于从万维网服务器传输超文本到本地浏览器的传送协议。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。