我想在后台线程中运行我的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;


}

07-27 13:17