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跨平台开发的优势”。