我想在后台线程中运行我的Content Resolver操作(查询,插入,删除)。
我发现AsyncQueryHandler可以解决我的问题。 AsyncQueryHandler的问题是:批量插入。我的应用程序中有这种操作,并且AsyncQueryHandler类中没有被覆盖的bulkInsert方法。
处理AsyncQueryHandler时如何处理批量插入?除了AsyncQueryHandler之外,还有其他选择吗?
最佳答案
嘿,在这种情况下,您可以使用CursorLoader。这将查询内容解析器并返回游标。它使用AsyncTaskLoader在后台线程上执行游标查询,以便它不会阻止应用程序的UI。
您可以查看http://www.theappguruz.com/blog/use-android-cursorloader-example了解更多详细信息。
您可以如下所示在内容提供商中定义批量插入方法
@Override
public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) {
//mOpenHelper is object of helper class.
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.beginTransaction();
int rowsInserted = 0;
try {
for (ContentValues value : values) {
long _id = db.insert(TABLE_NAME, null, value);
if (_id != -1) {
rowsInserted++;
}
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
if (rowsInserted > 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
return rowsInserted;
}