DBFlow源码分析:Transaction相关
2016-11-07 本文已影响125人
linheimx
事务
1. 封装
DBFlow对事务进行封装:Transaction
封装了什么
- 代码的执行
ITransaction transaction
- 执行成功后的回调
successCallback
- 执行失败后的回调
errorCallback
2. 执行
代码封装好了,是为了方便的执行。
Transaction也担负着执行的职责:

3. 问题
数据库只有一个,现在有一堆增删改查相关的事务,他们的执行肯定得考虑到数据同步的问题。这得考虑到数据库的lock与synchronization的问题。
那么DBFlow如何解决这个问题呢?
队列
1.管家:manager
当你要执行事务的时候,这些事务交给了manager来管理的。

我们来细看一下这个 manager:

manager持有队列的对象,对队列进行管理。
结构如下:

2. DefaultTransactionQueue
单独开一个线程去处理这个队列。
- queue这个线程持有:
LinkedBlockingQueue<Transaction> queue;
-
管理这个queue
注意:queue.take()--》取出并且移除队列的首个元素,若无元素,则会一直等待。此时,线程则阻塞了。
-
对外暴露了几个方法:
向队列中添加,移除某个事务。启动,退出这个线程。