我正在 Android 中设计一个模块,该模块进行一些处理,然后使用 ORMLite 事务写入数据库。特别是,我的背景代码将类似于:
public class BackgroundOperation implements Runnable {
@Override
public void run() {
//Do some stuff
//Write to the database in a transaction
try {
ORMHelper h = ORMHelper.getDefaultOrmHelper();
final MyModel modelObj = h.myModelDao.queryForId(someId);
TransactionManager.callInTransaction(
h.getConnectionSource(),
new Callable<Void>() {
public Void call() throws Exception {
modelObj.col1 = 10;
modelObj.col2 = "hello";
h.myModel2Dao.update(modelObj);
h.myModel2Dao.create(new MyModel2("a", "b"));
return null;
}
}
);
}
catch (Exception e) {
return null;
}
}
}
然后,这个可运行文件将通过提交给 ThreadPoolExecutor 来执行。如果需要,我希望能够取消后台线程,并试图确保如果操作被取消,那么事务将简单地失败并且什么都不做。例如,如果我这样做:
Future f = myThreadPoolExecutor.submit(new BackgroundOperation());
//Some time later
f.cancel(true);
我可以确定这将是全有或全无处理 ORMLite 中的交易。也就是说,不需要清理,我的 modelObj 将同时设置 col1 和 col2 或都不设置?在 Runnable 中捕获 InterruptedException 以处理以这种方式取消任务的情况时,我是否需要做任何特别的事情,或者我可以简单地退出?