2

我在 Android 中有一个应用程序(运行 4.0.3),它在表 A 中存储了大量数据。表 A 位于 SQLite 数据库中。我使用 ContentProvider 作为数据库上方的抽象层。

这里的大量数据意味着每月有近 80,000 条记录。表 A 的结构如下:

String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_A + " ( " + 
        COLUMN_ID + " INTEGER PRIMARY KEY NOT NULL" + "," + 
        COLUMN_GROUPNO      + " INTEGER NOT NULL DEFAULT(0)" + "," + 
        COLUMN_TIMESTAMP    + " DATETIME UNIQUE NOT NULL" + "," + 
        COLUMN_TAG          + " TEXT" + "," + 
        COLUMN_VALUE        + " REAL NOT NULL" + "," + 
        COLUMN_DEVICEID     + " TEXT NOT NULL" + "," +
        COLUMN_NEW          + " NUMERIC NOT NULL DEFAULT(1)" + " )";

这是索引语句:

String SQL_CREATE_INDEX_TIMESTAMP = "CREATE INDEX IF NOT EXISTS " + TABLE_A +
        "_" + COLUMN_TIMESTAMP + " ON " + TABLE_A + " (" +
        COLUMN_TIMESTAMP + ") ";

我已将列和表名定义为字符串常量。

从表 A 中检索此数据时,我的速度已经明显变慢。问题是,当我从该表中检索数据时,我首先将其放入 ArrayList 中,然后再显示它。显然,这可能是错误的做事方式。我试图找到一种更好的方法来使用 ContentProvider 来解决这个问题。但这不是困扰我的问题。

问题是由于某种原因,从最多只有 12 条记录的其他表中检索数据需要更长的时间。我看到这种延迟随着表 A 中记录数量的增加而增加。这没有任何意义。如果我从表 A 中检索数据,我可以理解延迟,但为什么从其他表中检索数据时会出现延迟。

澄清一下,如果表 A 为空或少于 3000 条记录,我不会遇到这种延迟。

可能是什么问题呢?

编辑:2012 年 9 月 14 日上午 9:53

为了澄清,我使用 ContentProvider 来管理数据库。为了查询数据,我使用了 context.getContentResolver().query 方法。

我在 ContentProvider 中的查询代码:

@Override
public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    final SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    final SQLiteDatabase db = dbHelper.getReadableDatabase();

    String tableName = getTableName(uri);

    queryBuilder.setTables(tableName);

    Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder);
    cursor.setNotificationUri(getContext().getContentResolver(), uri);

    return cursor;
}
4

1 回答 1

0

所以这很尴尬:

显然,在应用程序加载期间的某处有一行代码正在从表 A 中检索数据。这就是整个应用程序变慢的原因。

无论如何,我仍然需要弄清楚如何使用 ContentProvider 优化从表 A 加载数据。

于 2012-09-14T14:15:50.170 回答