0°

Android 项目最新架构

内容预览:
  • 谈起Fragment的时候,很多开发者直接摆 在移动操作系统上开发软件其实是...~
  • 由于ViewModel的本身和activity/fragment的生命周期绑定,当与之绑定的...~
  • 如图所示 “ 4.数据持久化:Room Room是Google提供的SQLite的ORM的解决方...~

始发于微信公众号: 程序员小乐

分享编程技能、互联网技术、生活感悟、打造干货分享平台,将总结的技术、心得、经验分享给大家,这里不只限于技术!值得爱学习的你去关注,感觉有帮助转发分享让更多的人去关注!点击上方 蓝字 关注!另外本号支持 投稿!


每日英语

Is a good habit to give up a kind of wisdom, laughed off the language is a kind of open-minded, pain without words is a kind of self-cultivation.

优秀是一种习惯,放弃是一种智慧,笑而不语是一种豁达,痛而不言是一种修养。

0 前言



为了帮助开发着打造一款优秀的APP,Google可谓费尽心力,推出了各种诸如MVP,MVVM等等项目架构的思路,帮助开发者更加高效的开发,尽管这样,Google还是接着推出了一个新的项目架构,以便给予开发者更多的选择,至于这种架构思·路和MVP等框架的优劣,各位看完文章或许自有定论。


1 生命周期



相比Activity,Fragment稍显复杂。谈起Fragment的时候,很多开发者直接摆

在移动操作系统上开发软件其实是十分复杂的一件事情,因为我们随时需要面对系统和用户的各种不可预料的操作,很多时候,事情并不向着我们预设的方向方向进展。因此系统向我们提供了核心组件的生命周期这种东西,告知我们的APP正处在什么样的状况中,以便于我们做出相应的处理。


Android 项目最新架构

如上图。虽然Google给出了Activity非常详尽的生命周期结构,因此我们对根据生命周期做出相应的合理的安排,比如添加和移除实时GPS位置监听:

Android 项目最新架构

可是随着业务的逐渐复杂,我们可能在添加监听之间需要向服务器验证某些用户信息,等返回信息正确才去监听定位。那么在网络异步回调的时候,我们就很难知道当前的activity的生命周期状态。

Android 项目最新架构

如果发生上图的情况,那么我们的占用的相关资源就可能永远无法移除了。这还只是冰山一角,大家尽可以想想,当我们的异步调用面对无法预知的用户操作和系统处理的时候,什么问题都可能发生。

总而言之,由于我们对于UI实时的状态做不到了如指掌,以至于对数据和逻辑的处理就无法尽善尽美。这是类似隐患得不到很好的解决根本原因。


2 Google大礼包



这次Google推出了一套新的项目架构组件和架构思路,从UI到Data,帮助我们更加精准的开发自己的APP。


2.1 核心:Lifecycle Components


这套架构最核心的就是生命周期组件,:Lifecycle Components用于管理UI控制器(Activity/Freagment)的生命周期,方便查询当前组件生命周期的状态。

可查询的状态如下:

Android 项目最新架构

具体的使用方式有两种:


  • 继承LifecycleActivity/LifecycleFragment即可

  • 自己实现LifecycleRegistryOwner接口



Java


Android 项目最新架构


那我们如何使用呢?


Android 项目最新架构

Android 项目最新架构


看到这里,你一定心头一喜,如果有这个组件,那么我们就完全有能力将Activity作为一个UI的控制器,仅仅用来显示UI和相应用户操作,把Activity的大小缩小至最小。不用着急,大礼包远不止这些。


3 ViewModel和LiveData



  • ViewModel 是一个UI相关数据的暂存器,当所有相关的UI都finish掉的时候,它才会清除自己的数据。

  • LiveData则是一个持有具体数据并且可被观察,能感知生命周期的组件(它就像RxJava中一个能遵循组件生命周期的Observable)


他俩的关系,就是,ViewModel负责管理着不同的LiveData,并把它提供给UI。


3.1 LiveData


我们可以先来说说LiveData。由于它已经能够感知生命周期,也就意味着我们并不需要在去查询当前UI的生命周期,由于可被观察,也就意味着当它持有的数据发生改变,观察者可以立即受到信息。livedata最重要的方法是一下几个:


Android 项目最新架构


这里有一个活跃的观察者的概念,我们不妨把它放在后面来看。LiveData的用法如下:


Android 项目最新架构

Android 项目最新架构

Android 项目最新架构


好了,LiveData基本的用法讲完了,由于有了LiveData,我们的data更加“智能”了。当UI不可见的时候,改变的数据将不会被更新到UI上。

而且如果数据在不同的UI界面都会被用到的时候,我们还可以一个单例的LiveData,为不同的UI提供统一的数据。这些操作就不去细讲了。

现在回头看LiveData,我们发现它至少有以下几个优点:


  • 可以避免内存泄露:由于 Observer 和 Lifecycle 绑定,当 Lifecycle 被销毁后,Observer 自动被清理。

  • 避免在 Activity 被销毁后更新数据导致的崩溃情况

  • 数据可共享

  • 数据更新更智能:当数据在UI不可见的时候更新了,在恢复可见的时候,最新的数据会及时更新到UI上。

  • 不需要在Activity中额外处理生命周期事件


3.2 ViewModel


ViewModel则相对简单些,因为他的作用是暂存UI相关的数据,保证即使Activity配置更改,重新创建时,数据依然能够被保存好。

基本用法如下:


Android 项目最新架构


这是ViewModel的最基本的用法,它负责从各个地方获取数据,然后把数据装到LiveData中,提供给UI;当然ViewModel也可以在不同的Fragment中共享,在这里就不多讲了。

由于ViewModel的本身和activity/fragment的生命周期绑定,当与之绑定的最后一个UI 销毁时,ViewModel才会clean自身的数据。


如图所示

Android 项目最新架构

4.数据持久化:Room



Room是Google提供的SQLite的ORM的解决方案,其实本质上和其他的ORM框架没什么特别大的差别,没有太多新意,因此只给出大体的架构图,有兴趣的同学可以自行去学习


Android 项目最新架构

5 总结



我们现在回头看整个架构

Android 项目最新架构

其实最有有趣的就是UI-ViewModel这个部分,这套架构至少可以帮助我们做到一下几点:

  • UI与Data真正分离

  • 异步调用和逻辑控制可以更加精细(因为对生命周期感知更多)

  • 实现Model驱动UI



6 附录



Android官网:

https://developer.android.com/topic/libraries/architecture/index.html


作者:拉丁吴

链接: http://www.jianshu.com/p/7fa7679572cc
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Android 项目最新架构—– 由   分享

如何您想进技术群和大牛们交流,关注公众号在后台回复 “加群” 即可

如果您觉得不错,请别忘了分享到您的朋友圈让更多的人看到!! 您的举手之劳,就是对我最好的支持,非常感谢!


Android 项目最新架构

每日掏心话

很现实的一句话:你得有足够的实力,你的原则和底线才会被人尊重。


Android 项目最新架构


推荐阅读





小密圈
这里聚集了业界内的大牛,值得各位大牛的加入!


Android 项目最新架构

看完本文有收获?请转发分享给更多人
关注「杨守乐」,提升编程技能

【QQ技术群】279126311 []
【QQ技术群】484572225 [未]

以上就是:Android 项目最新架构 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论