Android contentprovider 插入需要很多时间

标签 android sql insert android-contentprovider

我制作了自己的 contentprovider,我通过多次插入将大量数据一次性放入其中。

该应用程序将从外部源接收数据,此时我收到大约 30 个项目(因此是插入的 30 倍)。

现在我注意到这需要很多宝贵的时间(大约 3 秒,每次插入 100 毫秒)。

如何提高内容提供者的速度?我已经尝试将它们全部插入在一起,但最多需要 5 秒。

提前致谢。

最佳答案

insertBulk 中的所有内容包装到交易中。

例子:

    SQLiteDatabase sqlDB = mDB.getWritableDatabase();
    sqlDB.beginTransaction();
    try {

        for (ContentValues cv : values) {
            long newID = sqlDB.insertOrThrow(table, null, cv);
            if (newID <= 0) {
                throw new SQLException("Failed to insert row into " + uri);
            }
        }
        sqlDB.setTransactionSuccessful();
        getContext().getContentResolver().notifyChange(uri, null);
        numInserted = values.length;
    } finally {
        sqlDB.endTransaction();
    }

bulkInsert 默认不使用事务,因为默认行为只是调用 insert:

Override this to handle requests to insert a set of new rows, or the default implementation will iterate over the values and call insert(Uri, ContentValues) on each of them.

关于Android contentprovider 插入需要很多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8343154/

相关文章:

MySQL select id 其中至少有一个值不在列表中

sql - 删除 SQL Server 2016 中的前导或尾随 CR LF、制表符和空格

php - 我的 PHP 页面出现 SQL 语法错误

php - RedBean PHP 不插入两个表

android - 如何在android相对布局中根据屏幕宽度为 View 设置可缩放宽度

android - 通用图像加载器 | SSL 握手异常 : Handshake failed

android Canary 3.0 beta 5 未知元素 <library> 找到

android - 如何在android中关闭手机时发送短信?

mysql - 在 MySQL 中批量插入 SQL 查询

sql - 为每个客户选择第一次购买