加速数据库写入

时间:2011-07-01 19:34:00

标签: android listview sqlite android-cursoradapter

我有一个ListActivity,它使用CursorAdapter来显示一些数据。此数据是Web服务调用的结果。

我从Web服务调用获取响应,使用org.json。*库解析它,然后将结果写入应用程序的SQLite3数据库。然后重新查询ListActivity的Cursor,数据显示在列表中。

我的问题是数据库写入速度过慢。我唯一能想到的就是不使用CursorAdapter并将这些数据保存在内存中。我希望有人有另一个建议来加快速度。也许是某种批量插入?

应该注意的是,我正在使用ContentProvider进行插入。所以我调用了getContentResolver()。insert(...)。

以下有一些时间是通过LAN检索56行数据并显示它们的测试:

回复时间:178毫秒

解析json的时间:16ms

将56行写入数据库的时间:5714ms

我最终希望数据库写入时间不到1000毫秒。

2 个答案:

答案 0 :(得分:2)

我遇到了一些问题,发现首先在数据库上调用beginTransaction(),然后执行插入查询。示例代码:

    public void insertClassBatch(ArrayList<Class> batch) throws Exception
{
    this.getWritableDatabase().beginTransaction();
    for (Class c : batch)
    {
        this.insertClassStatement.bindString(1, c.getClassName());
        this.insertClassStatement.bindString(2, c.getClassValue());
        this.insertClassStatement.executeInsert();
    }
    this.getWritableDatabase().setTransactionSuccessful();
    this.getWritableDatabase().endTransaction();
}

这减少了插入100行(在这种情况下批量的大小)从大约30s到300ms左右。

答案 1 :(得分:0)

您是否为您写入数据库的每一行都进行了一次往返,或者您可以将所有这些行分批往返一次?我敢打赌,如果你没有批处理,网络延迟是罪魁祸首。