Фоновое изображение замедляет приложение для Android - PullRequest
1 голос
/ 11 апреля 2011

Я новичок в разработке приложений для Android.Я делаю приложение, в котором движется простой объект.Проблема с фоном.Когда я ставлю такой код:

protected void onDraw(Canvas canvas) {
    BackGround1 = BitmapFactory.decodeResource(getResources(), R.drawable.lightning1);
    canvas.drawBitmap(BackGround1, 0, 0, null);
    canvas.drawCircle(xp, yp, circleRadius, circlePaint);
}

движущийся объект (круг) значительно замедляется, и через некоторое время (например, 20 секунд) начинают появляться следы от круга, а после этого (~ 10 секунд) он"вылетает" и возвращается к предыдущему действию.

Если я поставлю
canvas.drawColor(Color.BLACK);
вместо
canvas.drawBitmap(BackGround1, 0, 0, null);, тогда все будет работать нормально.lightning1 - это изображение формата 480x800 jpg.
Может кто-нибудь сказать мне, что я делаю не так?

04-11 02:00:50.722: ERROR/dalvikvm-gc(13262): Could not create 1097728-byte ashmem mark stack: Too many open files
04-11 02:00:50.722: ERROR/dalvikvm-heap(13262): dvmHeapBeginMarkStep failed; aborting
04-11 02:00:50.722: ERROR/dalvikvm(13262): VM aborting
04-11 02:00:50.902: ERROR/ActivityManager(92): fail to set top app changed!

1 Ответ

2 голосов
/ 11 апреля 2011

Вы декодируете ресурс каждый раз, когда рисуется поверхность. Это создает много новых Bitmap объектов, и у Android более чем достаточно работы по запуску сборщика мусора для очистки после вас.

Возможно, вы захотите загрузить ресурс только один раз и сохранить его в поле.

В более общем смысле, вы всегда можете просмотреть Logcat, чтобы выяснить, что вызывает закрытие силы. Я предполагаю, что вы получаете OutOfMemoryException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...