Android热更新实现原理- http://blog.csdn.net/lzyzsd/article/details/49843581
热点技术的原理分析及四大组件原理分析- http://blog.csdn.net/yueqian_scut/article/category/2152617
SharedPreference的读写原理分析,apply是异步,commit是同步,在主线程中使用commit可能会影响性能,因为同步IO操作的耗时可能会比较长,两个方法都能保证value被正确的保存到磁盘上。
> 2016年技术
在Android开发中,新技术不断涌现。对于GitHub上如此众多的项目,有人不断Mark,有人分享自己的经验,不管怎么样,如果能让你真的有所学习有所收获,我们的目的也就达到了。
1、DataBinding
今年的 Google IO 大会上,Android 团队发布了一个数据绑定框架(Data Binding Library)。Data Binding Library 是一个 support 库,支持 Android 2.1+ 版本 (API level 7+)。
在2015年,它还是beta版本,但是就 Android Studio 2 的 Preview 版本发展来看,Google 在这个库上还是很花心思的,我们有理由相信,在2016年 DataBinding 将会迎来第一个正式版。
2、MVP模式
MVVM 与 MVP 模式,正在 Android 开发中越来越流行。在这里为大家强烈推荐我的:TheMVP 项目,可以直接引入项目作为 module 依赖。(详情请在 github 搜索 TheMVP )
3、热修复
热修复动态加载技术:HotFix、Nuwa、DroidFix、AndFix 等
插件化技术:DroidPlugin、DynamicAPK DynamicLoadApk
腾讯QQ空间的超级补丁技术和微信的Tinker
阿里AndFix以及.阿里巴巴的AndFix、Dexposed,
百度的DynamicLoadApk
360手机助手的 DroidPlugin
热修复,比较著名的有阿里巴巴的HotFix(AndFix)、Dexposed,腾讯QQ空间的超级补丁技术和微信的Tinker。
QQ空间超级补丁技术,超级补丁技术基于DEX分包方案,使用了多DEX加载的原理,大致的过程就是:把BUG方法修复以后,放到一个单独的DEX里,插入到dexElements数组的最前面,让虚拟机去加载修复完后的方法。
微信Tinker,微信针对QQ空间超级补丁技术的不足提出了一个提供DEX差量包,整体替换DEX的方案。主要的原理是与QQ空间超级补丁技术基本相同,区别在于不再将patch.dex增加到elements数组中,而是差量的方式给出patch.dex,然后将patch.dex与应用的classes.dex合并,然后整体替换掉旧的DEX,达到修复的目的。
阿里百川推出的热修复HotFix服务,相对于QQ空间超级补丁技术和微信Tinker来说,定位于紧急bug修复的场景下,能够最及时的修复bug,下拉补丁立即生效无需等待。(BUG修复的即时性)
AndFix不同于QQ空间超级补丁技术和微信Tinker通过增加或替换整个DEX的方案,提供了一种运行时在Native修改Filed指针的方式,实现方法的替换,达到即时生效无需重启,对应用无性能消耗的目的。
对于修复紧急BUG这个场景,阿里百川HotFix的更为合适,它更加轻量,可以在不重启的情况下生效,且对性能几乎没有影响。微信Tinker、QQ空间超级补丁技术更多地把场景定位在发布小的新功能上,采用ClassLoader的模式,牺牲较高的性能代价去实现类、资源新增或替换的功能。阿里百川HotFix对应用本身做到无侵入,无性能损耗。
插件化:百度的任玉刚
插件化:一个程序划分为不同的部分,以插件的形式加载到应用中去,本质上它使用的技术还是热修复技术,只是加入了更多工程实践,让它支持大规模的代码更新以及资源和SO包的更新。
热修复:当线上应用出现紧急BUG,为了避免重新发版,并且保证修复的及时性而进行的一项在线推送补丁的修复方案。
QQ空间超级补丁技术和微信Tinker 支持新增类和资源的替换,在一些功能化的更新上更为强大,但对应用的性能和稳定会有的一定的影响;阿里百川HotFix虽然暂时不支持新增类和资源的替换,对新功能的发布也有所限制,但是作为一项定位为线上紧急BUG的热修复的服务来说,能够真正做到BUG即时修复用户无感知,同时保证对应用性能不产生不必要的损耗,在热修复方面不失为一个好的选择。
在2015年,涌现出了一大批热修复动态加载技术:HotFix、Nuwa、DroidFix、AndFix 等等,以及同样原理的插件化技术:DroidPlugin、DynamicAPK。就连 Android Studio 2 的 Preview 版本中体现的 Instant Run 功能,本质上也是一种热修复技术。
无论是dexposed还是AndFix,都利用了Java hook的技术来替换要修复的方法,这就需要我们理解dalvik虚拟机加载、运行java方法的机制,并要掌握libdvm中一些关键的数据结构和函数的使用。
我猜想,在2016年一定会有基于 Instant Run 思想做出的热修复技术涌现。
Android 热补丁动态修复框架小结- http://blog.csdn.net/lmj623565791/article/details/49883661/
4、RxJava
优雅(也许仅体现在lambda表达式)的链式表达,轻松的线程切换,让 RxJava 在 2015 年已然得以如日中天。如果此时你还不了解 RxJava 究竟是什么的话,我建议你一定要仔细反思一下自己是否已与世界脱轨。
(Android开发中,强烈推荐使用retrolambda这个gradle插件,这样你就可以在你的代码中使用lambda了。
gradle-retrolambda-- https://github.com/evant/gradle-retrolambda
RxJava
RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西(触摸事件,web接口调用返回的数据。。。)
一个Observable可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束。
Rxjava的看起来很想设计模式中的观察者模式,但是有一点明显不同,那就是如果一个Observerble没有任何的的Subscriber,那么这个Observable是不会发出任何事件的。
1.Observable和Subscriber可以做任何事情
Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。
2.Observable和Subscriber是独立于中间的变换过程的。
在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。)
https://github.com/ReactiveX/RxJava ——RxJava核心库
https://github.com/ReactiveX/RxAndroid ——RxJava在Android中使用的扩展库
https://github.com/JakeWharton/RxBinding ——Android控件对RxJava的支持库
https://github.com/f2prateek/rx-preferences ——使SharedPreferences支持 RxJava
https://github.com/trello/RxLifecycle ——帮助RxJava在Android中生命周期的控制,避免内存溢出等问题
https://github.com/square/retrofit ——Retrofit
https://github.com/pushtorefresh/storio ——数据库对RxJava的支持
https://github.com/cn-ljb/rxjava_for_android -- rxjava_for_android
5、RxVolley
RxVolley,让 Volley 支持了 RxJava 后,让你的代码很轻松的脱离了回调地狱。同时移除掉了复杂的 HttpClient ,以及可选支持 OkHttp 与 ImageLoader,让你使用自己习惯编码风格的同时极大缩减了项目体积。
6、RxBus、RxBinding
得益于 RxJava 繁多的操作符与特性,结合此类基于 RxJava 的库,将使你的代码更加简洁,开发效率大大提高。
RxBus,值得一提的是 RxBus 并不是一个库,而是一种设计思维,它可以巧妙利用 RxJava 的特性,完美替换掉了原事件总线类库(EventBus/Otto等)
RxBinding, RxJava 封装的 View 事件处理,事件的改变以流的形式进行传递。
7、Kotlin 语言
作为 Android 阵营的 Swift ,在2015年也迎来了它的正式版。Kotlin 拥有很多 Java 所不具备的特性, 比如空指针安全,函数默认参数,默认包含模板类,对 lambda 的原生支持(在 Android 开发中, 常常使用 RxKotlin )等特性。
最后补上 React Native Android;插件化;热修复;VR;直播;VR开发、智能硬件开发等
[人工智能技术发展及机器人、无人驾驶汽车领域]
-------------------------------------
React Native是从 Web 前端开发框架 React 延伸出来的解决方案,主要解决的问题是 Web 页面在移动端性能低的问题,React Native 让开发者可以像开发 Web 页面那样用 React 的方式开发功能,同时框架会通过 JavaScript 与 Objective-C 的通信让界面使用原生组件渲染,让开发出来的功能拥有原生APP的性能和体验。
这里会有一个学习成本的问题,大部分 iOS 开发者并不熟悉 Web 前端开发,当他们需要一个动态化的方案去开发一个功能模块时,若使用 React Native,就意味着他需要学习 Web 前端的一整套开发技能,学习成本很高。所以目前一些使用 React Native 的团队里,这部分功能的开发是由前端开发者负责,而非终端开发者。
但前端开发者负责这部分功能也会有一些学习成本的问题,因为 React Native 还未十分成熟,出了 Bug 或有性能问题需要深入 React Native 客户端代码去排查和优化。也就是说 React Native 是跨 Web 前端开发和终端开发的技术,要求使用者同时有这两方面能力才能使用得当,这不可避免地带来学习成本的提高。
跨平台典型的适用场景是电商活动页面,以展示为主,重开发效率轻交互体验,但不适用于功能性的模块。对 Android 来说目前热更新方案十分成熟,Android 十分自由,可以直接用原生开发后生成 diff 包下发运行,这种无论是开发效率和效果都是最好的。所以若是重体验的功能模块,Android 使用原生的热更新方案,iOS 使用 JSPatch 开发,会更适合。
JSPatch Demo--https://github.com/bang590/JSPatch/tree/master/Demo/DribbbleDemo
iOS 动态更新方案上,我们跟进了对 JSPatch 和 React Native.
Android 热补丁技术——资源的热修复- http://blog.csdn.net/sbsujjbcy/article/details/52541803
----------------------------------
> 直播(H5直播,Android/iOS原生直播)
直播技术- http://lib.csdn.net/base/liveplay
【Dev Club 分享第五期】H5 视频直播那些事-- http://dev.qq.com/topic/57a42ee6503dfcb22007ede8
H5视频直播扫盲-- http://www.nihaoshijie.com.cn/index.php/archives/615
移动直播技术秒开优化经验(含PPT)-- http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547042&idx=1&sn=26d8728548a6b5b657079eeab121e283&scene=23&srcid=0428msEitG9LJ3JaKGaRCEjg#rd