Android8.1 推荐设计架构 基本示例代码分析
直接整个简单的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 other
livedataobjects and react on
onchangedevents from them.
这句话直接说就是这个mediatolivedata是livedata的子类,他可以监控其他的livedata并且会在他们变化的时候调用onchanged回调。所以这里从数据库中加载了所有的产品,这个加载出来的是个livedata, 咱们这里的observableproducts就监控这个数据,如果这个数据变了,就把自己的指设为改变后的值。
接下来看看db文件夹下边的,这里边好说,我对room还不大了解,但是这不妨碍去理解这个文件夹的结构。 对于appdatabase 要在里边使用线程创建数据库。 还hack了一把,用livedata
我又想起来,这个repository里边获取数据为啥用个mediatorlivedata,因为一开始livedata里边没数据呀,没数据怎么去监控,应该是这么个问题,一会需要试一下。
其他的实例不看了,重点是查询的数据返回的都是livedata。
看viewmodel ,这里的productviewmodel 需要一个参数:application。 这里边用了一个databind的东西,这个暂时不管是什么了。 另外一个model里边参数更多,定义了一个factory。 好多地方都说这个注入 inject 好像是不需要参数就可以构造对象出来,让耦合度变的很低,这个要注意,不管早晚都要去看一下。
剩下的就是adapter 啥的。 好像也没啥东西,就是文档里边说的,但是就是能够正确的运行。 返回之前的mediatorlivedata的测试,先测试完这个吧。
是我蠢了,根本就没吧fragment放到栈里边去,事实证明livedata也是可以的。mediatorlivedata要分情况看待吧。这里数据库返回的也是livedata,我想看看数据库插入之后会不会引起数据的变化。
不敢相信,真的可以哎。 接下来有必要再来一波livedata的解析了。
上一篇: 李日知公平执法,教妻知进退,告老还乡