いくつかの処理を実行し、ORMLiteトランザクションを使用してデータベースに書き込むモジュールをAndroidで設計しています。特に、私のバックグラウンドコードは次のようになります。
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をキャッチするときに特別なことをする必要がありますか、それとも単に終了できますか?