У меня есть активность, которая загружает три изображения png. На hdpi это 20кб, 148кб и 190кб. Вот код, которым я их загружаю:
Drawable bronzePlaque = resources.getDrawable(R.drawable.bronze_plaque);
Drawable silverPlaque = resources.getDrawable(R.drawable.silver_plaque);
Drawable goldPlaque = resources.getDrawable(R.drawable.gold_plaque);
Одни только эти вызовы занимают около 500 мс, что вызывает заметную задержку при загрузке этой активности.
Я не уверен, сколько времени это занимает из-за размера изображений, а не сбора мусора / увеличения размера кучи, но я хотел бы попытаться сделать что-то, чтобы улучшить его. Есть ли способ заставить виртуальную машину правильно увеличивать кучу и собирать мусор только один раз для этих трех распределений?
Вот вывод logcat для этих трех строк (и для системы выведите getTimeInMillis
вокруг них).
03-23 14:05:57.260: I/System.out(30302): time: 1395608757267
03-23 14:05:57.370: D/dalvikvm(30302): GC_FOR_ALLOC freed 39K, 4% free 7990K/8272K, paused 20ms, total 20ms
03-23 14:05:57.370: I/dalvikvm-heap(30302): Grow heap (frag case) to 8.968MB for 1188160-byte allocation
03-23 14:05:57.390: D/dalvikvm(30302): GC_FOR_ALLOC freed 1K, 4% free 9149K/9436K, paused 19ms, total 19ms
03-23 14:05:57.540: D/dalvikvm(30302): GC_FOR_ALLOC freed 1K, 4% free 9148K/9436K, paused 15ms, total 16ms
03-23 14:05:57.540: I/dalvikvm-heap(30302): Grow heap (frag case) to 10.245MB for 1340008-byte allocation
03-23 14:05:57.560: D/dalvikvm(30302): GC_FOR_ALLOC freed <1K, 3% free 10457K/10748K, paused 19ms, total 19ms
03-23 14:05:57.720: D/dalvikvm(30302): GC_FOR_ALLOC freed <1K, 3% free 10457K/10748K, paused 15ms, total 15ms
03-23 14:05:57.720: I/dalvikvm-heap(30302): Grow heap (frag case) to 11.482MB for 1297384-byte allocation
03-23 14:05:57.740: D/dalvikvm(30302): GC_FOR_ALLOC freed <1K, 3% free 11724K/12016K, paused 18ms, total 18ms
03-23 14:05:57.760: I/System.out(30302): time: 1395608757770
Я знаю, что после того, как эта активность была загружена, она намного быстрее загружается позже. Должен ли я загружать эти изображения один раз во время загрузки приложения, чтобы предотвратить болезненный рост кучи/сбор мусора? Я бы предпочел, чтобы эти полсекунды задержки были загружены вперед, чем при нажатии на действие.