我有一个 ListActivity,它使用 CursorAdapter 来显示一些数据。此数据是网络服务调用的结果。
我正在从网络服务调用中获取响应,使用 org.json.* 库对其进行解析,然后将结果写入应用程序的 SQLite3 数据库。然后重新查询 ListActivity 的 Cursor,数据显示在列表中。
我的问题是数据库写入速度太慢。我唯一能想到的就是不使用 CursorAdapter 并将这些数据保存在内存中。我希望有人有另一个建议来加快速度。也许是某种批量插入?
请注意,我正在使用 ContentProvider 进行插入。所以我调用 getContentResolver().insert(...)。
以下是通过 LAN 在 56 行数据中检索并显示它们的测试的一些时间:
响应时间:178 毫秒
解析json的时间:16ms
向数据库写入 56 行的时间:5714ms
对于这种数据量,我最终希望数据库写入时间低于 1000 毫秒。
最佳答案
我曾经遇到过一些问题,发现首先在您的数据库上调用 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 行(在这种情况下是批处理的大小)从大约 30 秒减少到 300 毫秒左右。
关于android - 加快数据库写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6552469/