Java Android实例化很多对象

时间:2015-08-14 13:44:07

标签: java android object garbage-collection

我的Android应用程序出了问题。我的问题是我有一个List,我把它拉到了BDD的40K线上。当我将所有数据放入List时,应用程序变得很慢。有没有一种优化对象实例化的方法?

private List<ContentValues> addObjects(ResultSet rst) throws DaoException, SQLException {
    //Ajout dans la BDD local SQLlite
    List<ContentValues> values = new ArrayList<>();
    ContentValues value = new ContentValues();
    while (rst.next()) {
        value.put("Numero", rst.getInt("Numéro"));
        value.put("AR_Ref", rst.getString("AR_Ref"));
        value.put.....
        .........;
        values.add(new ContentValues(value));  
    }
    return values;
}

Logcat:GC运作良多。

D/dalvikvm&#65109; GC_FOR_ALLOC freed 1230K, 5% free 62021K/64839K, paused 377ms
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1223K, 5% free 62033K/64839K, paused 367ms
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1222K, 5% free 62044K/64839K, paused 401ms
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1220K, 5% free 62056K/64839K, paused 412ms
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1220K, 5% free 62067K/64839K, paused 418ms
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1285K, 5% free 62080K/64903K, paused 420ms
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1293K, 5% free 62092K/64903K, paused 428ms
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1283K, 5% free 62104K/64903K, paused 420ms

1 个答案:

答案 0 :(得分:0)

看起来value每次循环都会越来越多。

我认为value应该在循环开始时被实例化(在和内部),values应该在循环结束时添加value

private List<ContentValues> addObjects(ResultSet rst) throws DaoException, SQLException {
    List<ContentValues> values = new ArrayList<>();

    while (rst.next()) {
        ContentValues value = new ContentValues();

        value.put("Numero", rst.getInt("Numéro"));
        value.put("AR_Ref", rst.getString("AR_Ref"));
        value.put.....
        .........;

        values.add(value);  
    }

    return values;
}