请在使用" First offline aproach"时解释android体系结构。

时间:2017-11-16 16:36:33

标签: android android-architecture-components android-architecture-lifecycle android-architecture

我的应用程序架构,很常见:

enter image description here

如果我有实体清单,请解释我,例如

@="\"C:\\Users\\Administrator\\bat\\start.bat\" 1" 

图片说明:

目前我做(根据上图):

  1. @Entity(tableName = TABLE_NAME) class Item constructor( @PrimaryKey(autoGenerate = false) var id: Long = 0L, @TypeConverters(ListToStringConverter::class) var eventDescription: List<String> = emptyList(), @TypeConverters(DateConverter::class) var date: Date = Date(), var rate: Int ?= null) 来自存储库的getLiveData
  2. 回调mLiveData
  3. 来自refreshFromDataBase()数据库的
  4. mLiveData.addSource - 导致Android视图快速更新的原因
  5. 回调LiveData
  6. 休息更新DatabaseTable
  7. 数据库插入导致LiveData添加将更改推送到视图
  8. 问题的制定

    5步的最佳做法是什么 - 新数据到来的时刻我必须用最新鲜的数据替换旧数据?

    目前我正在使用RxJava,Room,Kotlin和我在第3步中使用嵌套的Rx.Single,这是非常难看的spagetti代码。

    refreshFromNetwork()

    丑陋的spagetti代码。

    问题

    • 我应该在插入新项目之前擦除所有表格吗? Livedata监听List的更改,因此每当有任何更改(某些项目更新,某些已插入,某些已删除)视图将更新
    • 在我的所有Streams都是Single的情况下(原因:他们在onComplete时自行处理),如何在oder中按顺序链接它们以限制一个流规则?

1 个答案:

答案 0 :(得分:0)

这取决于您提取的数据是否相似。如果您的新数据通常完全不同,我会删除所有元素,然后只使用以下一种方法插入新元素:

@Insert
public void insertItems(Item... items);

如果您的新数据相似并且您不关心他们的订单,我会将所有新商品与旧商品进行比较,以了解每件商品是否必须更新,插入或删除商品。最后,您调用deleteItems(itemsToDelete),updateItems(itemsToUpdate)和insertItems(itemsToInsert)。这三种方法与上面描述的方法类似,但使用@ Delete,@ Update和@Insert。

如果您关心我推荐的订单,请查看Android Paging Library并创建一个自定义数据源,您可以在其中告知实时数据何时更新其值。一些要开始的链接:thisthisthisthis