一些比较好用的轮子
语言
相对于Java,kotlin现在也相对成熟了,掌握kotlin对目前来说还是很重要的,毕竟更现代化的语言,而且开发速度也会有所提升。
混合开发
React Native
Flutter
官方组件
Android官方JetPack
constraintLayout,挺好的ViewGroup
Android KTX ,kotlin官方扩展包
Android Lifecycles生命周期管理
LiveData,生命周期限制下的动态数据更新
Navigation, Fragment之前的跳转,替代原有的replace和add方法,限制推崇单Activity,多Fragment模式, 所以之前比较流行的路由ARouter其实并不好用,但旧项目依然可以通过ARouter来改造。
Room和Paging是数据库的操作,目前需求速度和更多操作的话,还是选择GreenDao比较好。
ViewModel, 类似于前端React中的state概念,在生命周期允许的条件下保存数据,这个框架是很核心的,结合了DI,和Android生命周期管理,本身的设计结构利用了Fragment的可空白性和周期包含性,很好的解决了Android的各种内存泄漏和数据同步问题。可以参考QQ音乐的ViewModel分析,讲的还算比较深入。
WorkManager,做后台闹钟等还算很好用的,本身没什么黑科技,在于兼容性很强。至于保活的黑科技,目前新版本基本上是没有实际效果了,Android每一代更新对后台的限制都是大动作。包括Q版本的后台唤起界面限制。全家桶保活也不大可能了,能通知到位是最好的结果。
其他的Jetpack组件应用于特殊条件
网络组件
OKHTTP, 已经是官方组件,但还需要引入,旧版本系统没有
Retrofit, Restful API方式,动态代理,声明式接口方法,很现代化的方式,而且一旦使用,很难瞧得上旧的方式来进行HTTP请求。
RxKotlin, RxJava, 很适合数据流的方式,但是Rx学习曲线比较陡峭,先要学习函数式(声明式)编程的思想才能更好的学习,对比学习的SQL语言,Rx就是这样的声明式语言框架,将来在kotlin中也会发现很多单元测试方法都是声明式的。
Rx也很重要,不单单是在网络请求,类似的框架在前端应用非常广泛,我们所说的响应式最强的我觉得还是Rx。
高级组件
koin,Kotlin依赖注入,kotlin版本的Guice, Dragger2虽然性能好,但毕竟实现来讲很复杂,学习曲线比较高,而且要求系统级别的操作。koin是我接触过得,最好用的依赖注入
val dataModule = module {
single { LoggerImpl() as Logger }
single { HttpLog(get()) }
single { CookiesManager(get()) }
single { UrlConfigImpl() as UrlConfig }
single { OkhttpWrapper(get(), get(), get()) }
single { RetrofitWrapper(get(), get()) }
single { NetworkHandler(get()) }
single { Prefs(get()) }
single { Downloader(get()) }
single { AccountRepositoryImpl(get(), get()) as AccountRepository }
single { API(get(), AccountApi::class.java).instance }
single { API(get(), PollApi::class.java).instance }
single { PollRepositoryImpl(get(), get()) as PollRepository }
single { API(get(), ApkApi::class.java).instance }
single { ApkRepositoryImpl(get(), get()) as ApkRepository }
}
写Demo肯定是用不到,和ViewModel结合,写大一点的应用还是有一定的必要。
单元测试
robolectric,空API提供系统级别模拟测试
Kluent, 面向Kotlin的Fluent断言库
"hello" shouldNotEqual "world"
mockito, 学习成本比较高的模拟接口框架
质量
leakCanary,内存泄漏问题检测
其他:
kotlin协程,暂时不要在项目中用吧,不太好用,跟Rx相比,不好用
blankj:utilcode, Android工具库,比较全,但Anko:Common基本的类似于Toast和alert 扩展方法更好用。
EventBus, 很久的事件总线,基本上每个项目都有这个框架。学习成本较低,也很好用。
MPAndroidChart, Android图表库。
RxPermission M以上的权限申请
GrowingIO 企业级打点
jkeyboardpanelswitch 键盘弹出处理
pinyin4j-2.5.0.jar 拼音搜索
TBS 腾讯浏览器服务,主要针对低版本
ical4j RRule 生成工具
jsoup Java爬虫,HTML解析工具
qmui 腾讯的UI库,写demo很好用
calendarview 很容易定制的日历组件
不太重要
其他的一些各种视图上的,比如各种下拉菜单什么的,基本上没有学习成本,GitHub上也是一大堆。
写在最后
框架的掌握在外企和大企业,一般不被看重,更重的是基础能力,比如操作系统,算法,数据结构三大老大难的问题,面试造火箭,工作拧螺丝,后台几百万并发,前端各种秒开。无论去大公司还是小公司,基础知识总是不能被抛弃,虽然用不上,却也会潜移默化的影响编程习惯和思考方式。了解一些框架是避免踩已经很明确的坑,重复造轮子是没有意义的,在小公司意味着一个人的独立开发能力和上手时间成本。在工作中学习和掌握新框架是具有风险的,尤其是一些比较复杂的框架Rx等,可能会导致线上的事故。所以,尽可能的去了解一些新的框架,新的趋势,也是对自己的一个提升。
不过,话说回来,真的没什么新意,也没必要每一个都要捧着源码来解析这个,分析那个,不至于。我们把库比作轮子,你想想,造个轮子和造汽车相比,那个更难。业务复杂性不输于框架,只是术业有专攻。