常见框架介绍

1.5小米push,信鸽push

信鸽推送腾讯出品,王者荣耀推送也是用此可见其强大。

1.6 shareSDK,友盟统计

1.7网易云信即时通讯

1.8 bugly收集bug 腾讯内部使用后来开放出来,umeng 错误上报要2个小时左右才能看到,bugly 1分钟左右。 错误删选上 bugly 有用户id ,系统版本,设备等,比umeng多一点。

1.9第三方支付:微信支付 支付宝(alipay)。

1.9.1 Tinker热修复 :是微信官方发布的 Android 热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新;

原理:Tinker都利用了Android 的类加载机制,Android中有两个主要的Classloader,PathClassLoader和DexClassLoader,它们都继承自BaseDexClassLoader,Android系统通过PathClassLoader来加载系统类和主dex中的类。而DexClassLoader则可用于加载指定路径的apk、jar或dex文件。BaseDexClassLoader 中调用findClass,这个方法中会遍历dexpathlist中的dexElements数组,然后初始化DexFile。ClassLoader在加载到正确的类之后就会停止加载此类,因此我们将包含正确的类的Dex文件中插入在dexElements数组前面就可以完成对问题类的修复

流程:启动应用-》有无fix_classes.dex文件-》下载补丁 patch.dex-》开启TinkerPathService 和旧dex文件合并生成全量dex-》重新启动把这个全量dex elements前面 》完成修复

2.0通知eventBus

是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

EventBus是在内部【存储】了一堆onEvent开头的方法,然后post的时候,根据post传入的【参数】,去找到匹配的方法,【反射】调用之。

另外,它内部使用了【Map】进行存储,【键就是参数的Class类型】。知道是这个类型,那么你觉得根据post传入的参数进行查找还是个事么?

其实不用发布者,订阅者,事件,总线这几个词或许更好理解,以后大家问了EventBus,可以说,就是在一个单例内部维持着一个map对象存储了一堆的方法;post无非就是根据参数去查找方法,进行反射调用。

1使用:

 EventBus.getDefault().register(this);  

onEventMainThread

onEventPostThread

onEventBackgroundThread

onEventAsync

EventBus.getDefault().unregister(this);  

2 register

根据传入的当前类,循环遍历该类内部所有方法匹配到“onEvent”开头的方法,封装到一个集合中。根据这个集合遍历优先级高的处理对象放到一个和对应类的subscriptionsByEventType的map集合中,键就是参数的Class类型,值就是封装的改类中的一些方法。

3 post

把我们post出去的event和subscriptionsByEventType这个map中的方法去遍历,得到了就用反射去去执行,在PostThread中直接调用,在MainThread,ui线程中就用handler去发送,在BackgroundThread和Async中是由  Eventbus中的一个线程池去调用

4 sticky

在register中,如果sticky为true,会去stickyEvents去查找事件,然后立即去post和post功能类型


2.1 greendao数据库

优点还包括以下几点:1.存取速度快; 2.支持数据库加密; 3.轻量级; 4.激活实体; 5.支持缓存; 6.代码自动生成

效率很高,插入和更新的速度是sqlite的2倍,加载实体的速度是ormlite的4.5倍,目前git上一直在做更新维护,start数量为9000多。


2.1.1比较:Realm

1.易用:Ream 不是在SQLite基础上的ORM,它有自己的数据查询引擎。并且十分容易使用。

2.快速:由于它是完全重新开始开发的数据库实现,所以它比任何的ORM速度都快很多,甚至比SLite速度都要快。

3.跨平台:Realm 支持 iOS & OS X (Objective‑C & Swift) & Android。我们可以在这些平台上共享Realm数据库文件,并且上层逻辑可以不用任何改动的情况下实现移植。 

4.高级:Ream支持加密,格式化查询,易于移植,支持JSON,流式api,数据变更通知等高级特性

5.可视化


原理简介

GreenDao向SQLite数据库提供了一个对象导向的接口,它为用户省下了很多重复的工作,而且提供了简便的操作接口。在Java工程中需要导入需要的jar包,根据GreenDao的规则在其中描述数据库的表结构,运行之后它会构建你的实体模型和DAO工具类。具体包括:


DaoMaster:持有数据库对象(SQLiteDatabase),并管理一些DAO类(不是对象)

能够创建和删除数据库表它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper的实现类,用于创建SQLite数据库的模式

DaoSession:管理制定模式下所有可用的DAO对象能对实体进行插入、加载、更新、刷新、删除操作。

DAO:每个实体都有一个DAO,这个dao就是拼接sql语句 去执行操作

Entit:可持久化的对象。我们通过@Entity对javabean进行注解,GreenDAO通过识别@Entity在编译期生成支持数据库的对象。

2.2、录音audiotrack

2.5 faceunity贴纸视频录制,FFmpeg处理视频

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序

2.6、金山云视频水印

2.7 Zxing二维码

2.8腾讯云•万象优图图片上传

背景:服务器对图片大小尺寸做了限制身份认证图片大小不够的话不清晰,才选用万象优图

腾讯云对象存储:包括CDN加速、优图处理、音视频转码、文件预览等组件,提供「存储 + 处理」一体化解决方案。同时 COS 可作为大数据计算的数据池,为大数据分析与计算提供数据源。

2.9、视频弹幕

compile 'com.github.ctiao:DanmakuFlameMaster:0.6.4'

DanmakuFlameMaster是 Android 上开源弹幕解析绘制引擎项目,也是 Android 上最好的开源弹幕引擎·烈焰弹幕。其架构清晰,简单易用,支持多种高效率绘制方式选择,支持多种自定义功能设置上。

目前,DanmakuFlameMaster开发包已被包括优酷土豆、开迅视频、MissEvan、echo回声、斗鱼TV、天天动听、被窝声次元、ACFUN 等 APP 使用

原理:

因此整个弹幕可以说就是根据一个计时器更新时间,并根据时间计算弹幕位置,实现弹幕的滑动效果

3.1 Airbnb全屏动画

动画的实现方式:

View Animation: 视图动画在古老的Android版本系统中就已经提供了,只能被用来设置View的动画。

Drawable Animation: 这种动画(也叫Frame动画、帧动画)其实可以划分到视图动画的类别,专门用来一个一个的显示Drawable的resources,就像放幻灯片一样。

Property Animation: 属性动画只对Android 3.0(API 11)以上版本的Android系统才有效,这种动画可以设置给任何Object,包括那些还没有渲染到屏幕上的对象。这种动画是可扩展的,可以让你自定义任何类型和属性的动画。

Lottie是Airbnb开源的一个支持 Android、iOS 以及 ReactNative,利用json文件的方式快速实现动画效果的库

在Android动画中,总共有两种类型的动画View Animation(视图动画)和Property Animator(属性动画);

其中

•View Animation包括Tween Animation(补间动画)和Frame Animation(逐帧动画);

•Property Animator包括ValueAnimator和ObjectAnimation;


3.2 RxJava/ RxAndroid

响应式编程(Reactive programming)不是一种API,而是一种新的非常有用的范式,而RxJava就是一套基于此思想的框架,在Android开发中我们通过这个框架就能探索响应式的世界,同时结合另一个库,RxAndroid,这是一个扩展库,更好的兼容了Android特性,比如主线程,UI事件等

RxJava是一个用于通过使用观察序列构成异步和基于事件的程序库。

RxJava作为一个工具库,使用的就是通用形式的观察者模式。

RxJava的观察者模式

RxJava有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。


3.3 dagger2

Dagger2是一个依赖注入框架,现在由Google接手维护。

Butter Knife,专门为Android View设计的绑定注解,专业解决各种findViewById。

目前主流的注解框架有xUtils、ButterKnife、Dragger 和 Roboguice,它们的实现原理都是一致的,都是通过反射机制实现的。通过在Runtime运行期去反射类中带有注解的Field和Method,然后再去执行注解相对应的逻辑代码。大家都知道反射机制是在APP的运行期执行的,会造成执行的效率下降,执行时间变长的缺点。

依赖注入的框架需要开启额外的服务,来扫描App中代码的Annotation,所以需要额外的系统资源, 当在我们 APP 中大量的使用基于反射的注解,会严重影响到性能。

3.3.1 Kotlin

Kotlin是JetBrains开发的基于JVM的语言,JetBrains想必大家应该很熟悉了,他们创造了很多强大的IDE,android studio谷歌官方的android IDE就是基于Intellij,kotlin可以作为一个插件被用来开发android跟java比kotlin有什么好处?

1.它更容易表现,使用kotlin你可以少写很多代码,比如创建数据类等。

2.它更安全,在用Java开发时,大多数代码都是预防性的。为了不遇到非预期的NullPointerException,在使用之前,要不断的检测对象是否为空。与许多其它语言一样,因为需要使用安全调用运算符显式指明对象是否能够为空(null),所以Kotlin是空类型安全的

3.它是函数式的,Kotlin是基于面向对象的语言。但是就如其他很多现代的语言那样,它使用了很多函数式编程的概念,比如,使用lambda表达式来更方便地解决问题。其中一个很棒的特性就是Collections的处理方式。

4.它可以扩展函数,这意味着我们可以扩展类的更多的特性,甚至我们没有权限去访问这个类

3.4、熟练掌握reactJs/react native ,原生混合开发 Web app混合开发。

3.5,熟悉Hybrid混合模式编程,熟悉NDK编程

Hybrid App(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”和“Web App跨平台开发的优势”。

你可能感兴趣的:(常见框架介绍)