当前位置: 移动技术网 > IT编程>移动开发>Android > Android8.1 推荐设计架构 基本示例代码分析

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

2018年12月10日  | 移动技术网IT编程  | 我要评论

黄岛信息港首页,济南文明网,厦门品牌设计

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

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

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

\

挨个文件看:

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的解析了。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网