Android基于开源项目搭建自己的技术堆栈

news2024/11/25 14:51:23

一、app的整体架构

从较高的层次讲,一个APP的整体架构可以分为两层,即应用层和基础框架层。

1、应用层专注于行业领域的实现,如金融、支付、地图、社交等,它直接面向用户,是用户对产品的第一层感知。

2、基础框架层专注于技术领域的实现,提供APP共有的特性,避免重复造轮子,它是用户对产品的第二层感知,例如性能、稳定性等。

一个理想的APP架构,首先应该是支持跨平台开发的;其次应该具有清晰的层次划分,同一层模块间充分解耦,模块内部符合面向对象设计的六大原则;最后应该在功能、性能、稳定性等方面达到综合最优。基于以上的设计原则,可以得到如下APP架构图,最上层是应用层,应用层以下都属于是基础框架层,可以看到基础架构层包括:组件层、基础层和跨平台层。

 二、技术选型

选择开源函数库或者第三方sdk,一般需要综合考虑以下几个方面。

1、特性:提供特性是否满足项目的需求。

2、可用性:是否提供了简洁便利的API,方便开发者集成使用。

3、性能:性能不能太差,否则项目后面性能优化会过不去,可能会出现需要替换函数库的情况。

4、文档:文档应该比较齐全,且可读性强。

5、技术支持:遇到问题或者bug,是否能够及时得到官方的技术支持很重要。

6、大小:引入函数库会增加apk大小,需要慎重使用。

7、方法数:如果函数库方法数太多,积累起来会导致app遇到64k问题。

三、日志记录能力

日志记录无论在服务端还是移动端开发,都是一个基础且重要的能力。

开源库:

Logger: https://github.com/orhanobut/logger

LogUtils: https://github.com/pengwei1024/LogUtils/

timber:https://github.com/JakeWharton/timber

timber是JakeWharton开发的一个日志记录库,它的特点是可扩展框架,开发者可以方便便捷地集成不同类型的日志记录方式,例如打印日志到Logcat,打印到日志文件、打印日志到网络等,timber通过一行代码可以调用多种方式。

四、JSON解析能力

移动端与服务端通信的数据格式,如果没有特殊需求的话,一般使用json格式。Android系统提供了原生的JSON解析API,但是它的速度非常慢,而且没有提供简洁方便的接口来提高开发者效率和降低出错的可能。因此我们一般选用其他优秀的JSON解析实现。目前JSON解析的开源实现主要包括如下几种:

1、gson: https://github.com/google/gson

2、jackson:https://github.com/FasterXML/jackson

jackson是java语言的一个流行JSON函数库,并没有为Android优化定制过,因此函数包中含有很多非必要的api,相比其他JSON函数库,用于Android平台会更显著的增大最终生成APK的体积。

3、Fastjson:https://github.com/alibaba/fastjson

Fastjson是阿里巴巴公司出品的一个Java高性能且功能完善的JSON函数库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提示到极致,号称是目前Java语言中最快的JSON库。Fastjson接口简单易用。

Fastjson还存在一个专门为Android定制的版本:

compile 'com.alibaba:fastjson:2.0.19.android'

4、LoganSquare:https://github.com/bluelinelabs/LoganSquare

综合:

gson:232KB

jackson:1.5MB

Fastjson:417KB

Fastjson.android:256KB

LoganSquare:307KB

一般选用gson或者fastjson.android作为基础技术堆栈中JSON解析和序列化库。

五、数据库操作能力

无论Android还是IOS平台,底层数据库都是基于SQLite实现,然后在系统层封装成用于应用层的API。虽然直接使用系统数据库的api性能很高,但这些api接口并不方便开发者使用。为了解决这个问题,一系列的对象关系映射(ORM)框架涌现出来,比较有名的有:

ActiveAndroid:https://github.com/pardom-zz/ActiveAndroid

ormlite:https://github.com/j256/ormlite-android

greenDAO:https://github.com/greenrobot/greenDAO

Realm:https://github.com/realm/realm-java

综合考虑:一般选用greenDAO。

六、网络通信能力

1、android-async-http:https://github.com/android-async-http/android-async-http

2、OkHttp:https://github.com/square/okhttp

3、Volley:https://github.com/google/volley

4、Retrofit:https://github.com/square/retrofit

准确的说,Retrofit并不是一个完整的网络请求函数库,而是将REST API转换成Java接口的一个开源函数库,它要求服务器API接口遵循REST规范。基于注解使得代码变得很简洁,Retrofit默认情况下使用GSON作为JSON解析器,使用OkHttp实现网络请求,三者通常配合使用,这两者也可替换成其他函数库。

七、图片缓存和显示能力

1、BitmapFun:官方的图片加载和缓存示例,入门图片缓存函数库。

2、Picasso:https://github.com/square/picasso

3、Glide:https://github.com/bumptech/glide

4、Fresco:https://github.com/facebook/fresco

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从安装过程品国产Linux操作系统的技术来源与异同之处

作者:IT圈黎俊杰 使用Linux操作系统的第一步无疑是安装,本文通过作者亲手对多个国外主流开源操作系统、多个主流国产操作系统的安装过程进行记录与对比,让大家可以借助安装过程的界面风格、页面布局、功能等,细细的品一下国产Linu…

Unity3D教程:简单的碰撞检测

需求:当立方体Cube碰到地面Plane的时候,输出碰撞物体的名称,则表述检测到立方体碰撞了地面。 1.搭建一个简单的场景。 在新的工程中选择File->new Scene创建新的场景。然后在该场景中添加地板:GameObject->Create Other-&…

Mapstruct类型转换Person ->PersonDTO以及po、vo、dto、request概念

文章目录po、vo、dto、requestPerson ->PersonDTO安装插件引入依赖Maven项目结构图Person 与 PersonDTOConverterpo、vo、dto、request Mapstruct 完成类型转换! po:数据持久层对象,用于映射数据库中的表 dto:数据传输对象&a…

各类软件研发行业源代码防泄密需求分析

各类软件研发行业,都有自己的核心数据以及核心文档,用户数据等敏感信息,这些信息数据有以下共性: 属于核心机密资料,万一泄密会给造成恶劣影响 核心数据类型多,有源代码数据,员工计算机水平高…

[附源码]Nodejs计算机毕业设计基于web的图书借阅管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

2-3查找树-树-数据结构和算法(Java)

文章目录1 概述2 查找3 插入3.1 向2-结点中插入新键3.2 向一个只含有一个3-结点的树中插入新键3.3 向一个父结点为2-结点的3-结点中插入新键3.4 向一个父结点为3-结点的3-结点中插入新键4 分析4.1 局部变换4.2 全局性质5 后记1 概述 我们前面学习过关于二叉树的算法已经能够很…

CDN工作原理以及使用CDN的好处

所有的大厂以及其他很多互联网公司都使用了CDN,那CDN到底是什么呢?为什么要使用?一起来看看吧! 文章目录1. 什么是CDN?2. CDN 是怎么工作的?3. 使用 CDN 有什么好处?3.1 缩短网站加载时间3.2 减…

Zookeeper[2]- Zookeeper集群环境搭建

前边步骤可参考: Zookeeper[1]-Zookeeper介绍与安装以及集群环境准备_豆虫儿的博客-CSDN博客Zookeeper的介绍和安装Zookeeper客户端使用ZookeeperJavaAPI使用我们为了学习Dubbo,而在dubbo中需要一个注册中心,而Zookeeper是我们在使用Dubbo是官方推荐的…

作业-12.13【使用QT制作一个简单的登录界面】

#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //设置窗口属性 this->setWindowTitle("Sumeru Dance Training"); this->setFixedSize(8…

[激光原理与应用-52]:《激光焊接质量实时监测系统研究》-3-传感器选型和电路设计

目录 3.1 传感器的选取 3.1.1 光电探测基本概念 3.1.2 可见光传感器 3.1.4 声音传感器 3.2 信号调理电路 3.2.0 可见光电信号前置放大电路 3.2.1 红外光电信号前置放大电路 3.2.2 程控自适应增益的光信号放大电路 3.2.3 光信号滤波电路 3.2.4 声信号调理电路 3.3 数据…

【图像处理】边缘检测算子有哪些以及它们之间的对比

这个问题应该是做过传统图像处理的人都接触过的吧。粗略总结下,应该也不会问太细,面试官大概就考察下大家的知识面吧。 综述 边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。图像边缘检测大幅度地减少了数据量&#xf…

第五章. 可视化数据分析图表—常用图表的绘制3—散点图,面积图,热力图

第五章. 可视化数据分析图 5.3 常用图表的绘制3—散点图,面积图,热力图 本节主要介绍常用图表的绘制,主要包括散点图,面积图,热力图。 1.散点图(matplotlib.pyplot.scatter) 散点图主要用来查…

Redux Hooks actions 调用方式优化(一)

hooks 可以说是现在react编程的的主流,redux 迎合这个主流也推出 toolkit 工具集来。但是在用toolkit 搭建前端框架后,给人的感觉就是比原先的connect 那一套好些,但用起来还是挺繁琐的。 一 toolkit 搭建的正常使用版本 1.1 创建store im…

三、pcm音频转wav

前言 ffmpeg录制下来的音频为pcm格式(内部存储着十六进制数据),但pcm格式的音频无法直接播放 本文先将pcm转换成wav格式(提要提前了解音频知识) 首先分析wav文件格式(wav的本质是在pcm数据前加上文件头&a…

[附源码]Node.js计算机毕业设计电子工厂进销存管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

《Linux运维总结:Centos7.6使用yum安装Mysql8.0.31》

一、使用yum安装mysql服务 官方:下载对应的yum源 1、yum源下载 [rootlocalhost ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm [rootlocalhost ~]# rpm -ivh mysql80-community-release-el7-7.noarch.rpm如下图所示:…

vsftpd 升级3.0.2-29 和 增加账号访问

一、下载文件至/opt 百度网盘: 链接: https://pan.baidu.com/s/1Ad20bm5fvw8WvtaV3uHGYA 提取码: 2pa9 二、安装 2.1、切换目录 命令:cd /opt 2.2、授权 命令:chmod x centos7.6-vsftpd-upgrade.sh 2.3、安装 命令:./cent…

D. Lucky Chains(gcd + 线性筛)

Problem - D - Codeforces 如果一对正整数(x,y)的最大公除数等于1(gcd(x,y)1),我们就把它们命名为幸运。 让我们把由(x,y)引起的链定义为一个由(x,y), (x1,y1), (x2,y2), ..., (xk,yk)组成的序列,对于某个整数k≥0。 如果链中的所有配对都是幸运的&…

2022-12-13 note

1、linux内核的特点 1. linux内核是完全开源的作者:linusgit --> 代码版本管理工具 2. linux内核源码支持多种不同的架构,比如arm架构,powerPC,mips,Risc-V,X86等 3. linux内核采用模块化的编译的思想 4. 在linux内核中只允许出现C代码或…

优秀的PM如何轻松应对公司90%以上的沟通难题

项目经理和PMO工作中最多的事情往往是沟通,但是你在工作中会不会遇到很多沟通难题?如果其他环节的人处理不好还可以理解,但是咱们处理不好就说不过去了,并且还会让人感觉不专业,丧失很多机会,甚至失去领导的…