AsyncTask在数据库操作期间冻结UI

时间:2015-12-24 08:18:40

标签: android android-asynctask

我正在启动asyncTask以在数据库中执行冗长的操作(超过1秒)。

在我启动AsyncTask之后,我想完成它所进行的活动并继续前进。问题是活动一直挂起,直到AsyncTask结束。

我注入任务:

 @Inject
 CreateMultipleTransactionsTask mCreateMultipleTransactionTask;

以后我点击一个按钮后打电话:

mCreateMultipleTransactionTask.execute(transaction);

在紧接下方我致电finish()以关闭活动。但是,我看到finish()被调用但活动仍在那里。

这是任务:

public class CreateMultipleTransactionsTask extends AsyncTask<Transaction, Void, List<Long>> {

    @Inject
    TransactionDataSource mDataSource;

    @Override
    protected void onPostExecute(List<Long> longs) {
        super.onPostExecute(longs);
        mDataSource.close();
    }

    @Override
    protected List<Long> doInBackground(Transaction... params) {
        return mDataSource.createRepeatingTransaction(params[0]);
    }
}

1 个答案:

答案 0 :(得分:0)

在启动AsyncTask后立即终止您的活动,不会阻止AsyncTask运行完成。
它将保留对Activity的引用,使Activity不被垃圾收集 在您的情况下,我建议使用service 即使您完成了活动,该服务也会继续运行。只是不要将它绑定到你要杀死的活动上。