在我的 android 应用程序中,有一个运行时间相对较长的 AsyncTask 我正在运行以在应用程序启动时更新数据库。如果用户在任务完成之前退出应用程序,我需要将其包装在事务中以回滚。但是,由于将代码包装在事务中,它会阻塞用户界面,直到任务完成。为什么会这样,因为代码已经在单独的线程中运行?
我正在使用ORMLite,这基本上是事务的包装器,更新数据库的代码进入call()..,在添加代码以更新事务中的数据库之前,没有锁定ui ...
public ConnectionSource source;
@Override
protected Boolean doInBackground(Context... params) {
try {
TransactionManager.callInTransaction(source, new Callable<Void>() {
public Void call() throws Exception {
return null;
}
});