私のAndroidアプリには、アプリの起動時にデータベースを更新するために実行している比較的長時間実行されるAsyncTaskがあります。タスクが完了する前にユーザーがアプリを終了した場合にロールバックするために、それをトランザクションでラップする必要があります。ただし、コードをトランザクションにラップするため、タスクが完了するまでUIがブロックされます。コードが既に別のスレッドで実行されているため、これはなぜでしょうか?
私は ORMLite を使用していますが、これは基本的にトランザクションのラッパーです。db を更新するコードは call().. 内に入ります。トランザクション内で db を更新するコードを追加する前に、UI のロックはありませんでした...
public ConnectionSource source;
@Override
protected Boolean doInBackground(Context... params) {
try {
TransactionManager.callInTransaction(source, new Callable<Void>() {
public Void call() throws Exception {
return null;
}
});