欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android8.1 推荐设计架构 基本示例代码分析

程序员文章站 2022-08-10 11:54:14
直接整个简单的viewmodel加上一个livedata,屁都没测试出来。 还得看个完整的例子。 我们也可以在android studio里面新建一个sample,最底下的选项。 这个软件最后的效...

直接整个简单的viewmodel加上一个livedata,屁都没测试出来。 还得看个完整的例子。

我们也可以在android studio里面新建一个sample,最底下的选项。

这个软件最后的效果是这样。

Android8.1 推荐设计架构 基本示例代码分析

挨个文件看:

appexecutors 里边弄了几个线程池用来执行耗时的操作。通过getxxx方法就可以获得相应的池子。

basicapp 这个是application,新建的时候就初始化了线程池。还定义了类似于全局方法的两个方法可以获取database和datarepository

datarepository 这个是获取数据用的,里边维护了一个products的list的livedata。 一个实例,注意这个地方数据库是作为参数传进来的,在学习设计模式的时候一定要注意这些细节。 里边有一些方法:1.获取所有的产品,直接返回维护的list livedata 2.在数据库中load指定产品。3.在数据库中load指定的产品详情。

对我来说,里边最困惑的地方是这里:

mobservableproducts = new mediatorlivedata<>();

        mobservableproducts.addsource(mdatabase.productdao().loadallproducts(),
                productentities -> {
                    if (mdatabase.getdatabasecreated().getvalue() != null) {
                        mobservableproducts.postvalue(productentities);
                    }
                });

所以要去查清楚!!

livedatasubclass which may observe otherlivedataobjects and react ononchangedevents from them.

这句话直接说就是这个mediatolivedata是livedata的子类,他可以监控其他的livedata并且会在他们变化的时候调用onchanged回调。所以这里从数据库中加载了所有的产品,这个加载出来的是个livedata, 咱们这里的observableproducts就监控这个数据,如果这个数据变了,就把自己的指设为改变后的值。

接下来看看db文件夹下边的,这里边好说,我对room还不大了解,但是这不妨碍去理解这个文件夹的结构。 对于appdatabase 要在里边使用线程创建数据库。 还hack了一把,用livedata来标志是否创建成功了。 这个数据库的整体接口没有太多,维护了两个dao,可以通过一个事务去存储所有的数据。

我又想起来,这个repository里边获取数据为啥用个mediatorlivedata,因为一开始livedata里边没数据呀,没数据怎么去监控,应该是这么个问题,一会需要试一下。

其他的实例不看了,重点是查询的数据返回的都是livedata。

看viewmodel ,这里的productviewmodel 需要一个参数:application。 这里边用了一个databind的东西,这个暂时不管是什么了。 另外一个model里边参数更多,定义了一个factory。 好多地方都说这个注入 inject 好像是不需要参数就可以构造对象出来,让耦合度变的很低,这个要注意,不管早晚都要去看一下。

剩下的就是adapter 啥的。 好像也没啥东西,就是文档里边说的,但是就是能够正确的运行。 返回之前的mediatorlivedata的测试,先测试完这个吧。

是我蠢了,根本就没吧fragment放到栈里边去,事实证明livedata也是可以的。mediatorlivedata要分情况看待吧。这里数据库返回的也是livedata,我想看看数据库插入之后会不会引起数据的变化。

不敢相信,真的可以哎。 接下来有必要再来一波livedata的解析了。