2023年7月25日发(作者:)
AAC架构⼀:AAC架构简介Jetpack是2018年⾕歌I/O 发布了⼀系列辅助android开发者的实⽤⼯具库,以帮助开发者构建出⾊的 Android 应⽤。Jetpack 通过提供现代化应⽤架构以及提供强健的向后兼容能⼒等⽅式,让开发者能够快速、轻松地创造拥有卓越性能的⾼质量应。Jetpack是Google重点打造的下⼀代 Android 组件,可以说它就是Android的未来⽅向,所以掌握好Jetpack,你就掌握好了未来战场的强⼤武器。本猿准备通过⼀系列的⽂章去记录我对JetPack的学习要点及⼼得。那么我们就从AAC开始吧。AAC架构⼀:AAC架构简介AAC架构⼆:AAC架构应⽤举例⼀、前⾔基于⽬前的项⽬的架构⽐较陈旧,⽽且AAC架构也推⼴了有⼀段时间,基本上处于⽐较成熟的状况了,于是决⼼下来,把架构进⾏更新。很久之前就想开始写点关于Jetpack这个包集相关的⽂章,但是,出于种种原因,⼀直搁置着,借着这次更新架构,顺便把这个⼼愿了了。AAC架构是Jetpack⾥⽐较核⼼的⼀部分,我们就从这个点出发,逐步体验⼀下Jetpack的强⼤。⼆、常⽤的架构原则我们先回顾⼀下,⼤家⽇常开放中经常⽤到的架构原则。1、分离关注点要遵循的最重要的原则是分离关注点,⼀种常见的错误是在⼀个
Activity 或
Fragment 中编写所有代码。这些基于界⾯的类应仅包含处理界⾯和操作系统交互的逻辑。您应尽可能使这些类保持精简,这样可以避免许多与⽣命周期相关的问题。请注意,您并⾮拥有
Activity 和
Fragment 的实现;它们只是表⽰ Android 操作系统与应⽤之间关系的粘合类。操作系统可能会根据⽤户互动或因内存不⾜等系统条件随时销毁它们。为了提供令⼈满意的⽤户体验和更易于管理的应⽤维护体验,您最好尽量减少对它们的依赖。2、通过模型驱动界⾯另⼀个重要原则是您应该通过模型驱动界⾯(最好是持久性模型)。模型是负责处理应⽤数据的组件。它们独⽴于应⽤中的
View 对象和应⽤组件,因此不受应⽤的⽣命周期以及相关的关注点的影响。持久性是理想之选,原因如下:如果 Android 操作系统销毁应⽤以释放资源,⽤户不会丢失数据。当⽹络连接不稳定或不可⽤时,应⽤会继续⼯作。应⽤所基于的模型类应明确定义数据管理职责,这样将使应⽤更可测试且更⼀致。基于常见的架构原则,如果你的架构⾮常陈旧或者⽐较凌乱,我觉得还是⾮常有必要更新换代的,这⾥,我推荐使⽤ACC架构。三、AAC架构我们先来看⼀下定义:Android Architecture Components,简称 AAC,⼀个处理UI的⽣命周期与数据的持久化的架构,它基于管理UI组件⽣命周期和处理数据持久性的类,可以帮助您设计健壮、可测试和可维护的应⽤程序。1、AAC 的核⼼AAC架构的核⼼部分包括:Lifecycle, LiveData, ViewModel 以及 RoomLifecycle帮助您管理
Activity 和
Fragment ⽣命周期。⽣存配置更改,避免内存泄漏并轻松将数据加载到UI中。使⽤LiveData 构建数据对象,以便在基础数据库更改时通知视图。ViewModel存储在应⽤程序轮换时未销毁的UI相关数据。Room是⼀个SQLite对象映射库。使⽤它来避免样板代码并轻松地将SQLite表数据转换为Java对象。Room提供SQLite语句的编译时检查,可以返回RxJava,Flowable和LiveData observable。优势通过它可以⾮常优雅的让数据与界⾯交互并做⼀些持久化的东西⾼度解耦⾃动管理⽣命周期⽽且不⽤担⼼内存泄漏的问题.架构图如下:image请注意,每个组件仅依赖于其下⼀级的组件。例如,Activity 和 Fragment 仅依赖于视图模型。存储区是唯⼀依赖于其他多个类的类;图中,存储区依赖于持久性数据模型和远程后端数据源。这种设计打造了⼀致且愉快的⽤户体验。⽆论⽤户上次使⽤应⽤是在⼏分钟前还是⼏天之前,现在回到应⽤时都会⽴即看到应⽤在本地保留的⽤户信息。如果此数据已过时,则应⽤的存储区模块将开始在后台更新数据。注意:任何应⽤编写⽅式都不可能是每种情况的最佳选择。话虽如此,但推荐的这个架构是个不错的起点,适合⼤多数情况和⼯作流。如果您已经有编写 Android 应⽤的好⽅法(遵循以上提到的常见的架构原则),则⽆需更改。2、LifeCycle & LifecycleOwnerLifecycle:它是⼀个持有 Activity/Fragment ⽣命周期状态信息的类,并且允许其他对象观察此状态。LifecycleOwner:是⼀个具有单⼀⽅法的接⼝。如果⼀个类实现了此接⼝,则该类中需要持有⼀个 Lifecycle 对象,并通过ecycle() ⽅法返回该对象。并不是只有 Activity 和 Fragment 才可以实现 LifecycleOwner 接⼝的,任何和 Activity/Fragment ⽣命周期有关系的类都可以实现此接⼝。通过实现此接⼝,该类完全是⽣命周期可感知的,只需要对它进⾏初始化,它就可以进⾏⾃⼰的初始化和清理操作,⽽不受其Activity/Fragment 的管理activity活动图:activity活动图获取当前activity的状态: if(getLifecycle().getCurrentState() == D){ //todo ... }3、LiveDataLiveData 是⼀个数据持有类,它持有⼀个值并且该值可以被观察。不同于普通的可观察者,LiveData 遵从应⽤组件的⽣命周期,这样Observer 便可以指定⼀个其应该遵循的 Lifecycle。如果 Observer 所依附的 Lifecycle 处于 STARTED 或者 RESUMED 状态,则 LiveData 认为 Observer 处于活跃状态。可以感知组件⽣命周期的 LiveData 给我们提供了⼀种可能:可以在多个 Activity、Fragment 之间共享它。使⽤ LiveData 会有以下⼏个优势:避免内存泄露:因为 Observer 是绑定到 Lifecycle 对象上的,当 Lifecycle 对象被销毁的时候,LiveData 对象也会被⾃动清除不会因为 Activity 停⽌⽽使应⽤崩溃:如果 Observer 所绑定的 Lifecycle 处于闲置状态(例如:Activity 处于后台运⾏时),他们不会接收到改变的事件始终保持最新的数据:如果⼀个 Lifecycle 重新启动以后(例如:Activity 从后台重新开始运⾏于前台),它会接收到最新的数据(除⾮没有最新的数据)正确处理配置改变:如果⼀个 Activity 或者 Fragment 以为配置改变(例如:旋转屏幕)被重建以后,LiveData 将会接收到最新的数据资源共享:通过单例模式,可以在多个 Activity 或者 Fragment 之间共享 LiveData 数据。不再⼿动的处理⽣命周期:Fragment 只有在处于活跃的时候才会观察 LiveData 数据。由于 Fragment 提供了 Lifecycle 对象,所以LiveData 会管理这⼀切。有时候,也许想在 LiveData 被下发到 Observer 之前,改变 LiveData 的值,或者是基于当前的 LiveData 下发另⼀个不同的 LiveData 值。Lifecycle 包中的 Transformations 可以实现这样的功能。(),使⽤此⽅法,可以将 LiveData 传递到下游LiveData
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690215787a316083.html
评论列表(0条)