Страница 1 из 1

java.lang.OutOfMemoryError

Добавлено: 16 апр 2014, 00:13
Lucifer777
Здравствуйте!

Код: Выделить всё

ArrayList<Bitmap> alb= new ArrayList<Bitmap>();
    	alb.add(0, BitmapFactory.decodeResource(getResources(),R.drawable.rotonda_01));
    	alb.add(1, BitmapFactory.decodeResource(getResources(),R.drawable.map_02));//вот тут вылетает
    	alb.add(2, BitmapFactory.decodeResource(getResources(),R.drawable.tile_03));
    	alb.add(3, BitmapFactory.decodeResource(getResources(),R.drawable.structure_04));
    	alb.add(4, BitmapFactory.decodeResource(getResources(),R.drawable.yaht_05));
    	alb.add(5, BitmapFactory.decodeResource(getResources(),R.drawable.stairs_06));
    	alb.add(6, BitmapFactory.decodeResource(getResources(),R.drawable.arhitechture_07));
    	alb.add(7, BitmapFactory.decodeResource(getResources(),R.drawable.interior_08));
    	alb.add(8, BitmapFactory.decodeResource(getResources(),R.drawable.guestroom_09));
    	alb.add(9, BitmapFactory.decodeResource(getResources(),R.drawable.reception_11));
    	alb.add(10,BitmapFactory.decodeResource(getResources(),R.drawable.elevator_10));
    	alb.add(11,BitmapFactory.decodeResource(getResources(),R.drawable.arches_12));
  • 04-16 00:26:53.666: E/AndroidRuntime(1759): FATAL EXCEPTION: main
    04-16 00:26:53.666: E/AndroidRuntime(1759): java.lang.OutOfMemoryError
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:378)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:408)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at ru.donstroy.parusamobile.aboutcomplex.AboutComplexActivity.initData(AboutComplexActivity.java:93)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at ru.donstroy.parusamobile.aboutcomplex.AboutComplexActivity.onCreate(AboutComplexActivity.java:29)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.app.Activity.performCreate(Activity.java:5104)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2262)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.app.ActivityThread.access$600(ActivityThread.java:153)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.os.Handler.dispatchMessage(Handler.java:99)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.os.Looper.loop(Looper.java:137)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at android.app.ActivityThread.main(ActivityThread.java:5227)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at java.lang.reflect.Method.invokeNative(Native Method)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at java.lang.reflect.Method.invoke(Method.java:511)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
    04-16 00:26:53.666: E/AndroidRuntime(1759): at dalvik.system.NativeStart.main(Native Method)
Ну думаю и так всё ясно, пояснять не стоит.
Пробовал после каждого alb.add(0, BitmapFactory.decodeResource(getResources(),R.drawable.rotonda_01)); делать alb.get(index).recycle();- не помогло. Вариант от гугла кромсать изображения показался мне не подходящим, так как когда попадётся дисплей больших размеров это может не сработать и снова вылетит эта ошибка.
Форумчани подскажите пожалуйста как побороть утечку памяти универсальным способом ну или просто как это сделать.

Re: java.lang.OutOfMemoryError

Добавлено: 16 апр 2014, 08:44
altwin
Этот вопрос уже много раз обсуждался на этом форуме.
http://developer.android.com/intl/ru/tr ... index.html

Re: java.lang.OutOfMemoryError

Добавлено: 16 апр 2014, 09:05
Lucifer777
altwin писал(а):Этот вопрос уже много раз обсуждался на этом форуме.
http://developer.android.com/intl/ru/tr ... index.html

был там, читал.
Насколько я правильно понял там в зависимости от экрана сжимают изображения а если попадётся устройство, которому сжимать нечего не надо будет?

Re: java.lang.OutOfMemoryError

Добавлено: 16 апр 2014, 09:14
altwin
Если вы хотите сохранить исходное изображение, создайте свою папку на sd карте и грузите туда оригиналы, перед тем, как показывать в любом случае придется делать resize. В этой теме: viewtopic.php?f=24&t=3856 указанны 3 довольно популярные библиотеки, вы можете на github посмотреть исходники и разобраться ,как работают они и соответсвенно, как делают в большинстве случаев.

Re: java.lang.OutOfMemoryError

Добавлено: 16 апр 2014, 09:19
Lucifer777
altwin писал(а):Если вы хотите сохранить исходное изображение, создайте свою папку на sd карте и грузите туда оригиналы, перед тем, как показывать в любом случае придется делать resize. В этой теме: viewtopic.php?f=24&t=3856 указанны 3 довольно популярные библиотеки, вы можете на github посмотреть исходники и разобраться ,как работают они и соответсвенно, как делают в большинстве случаев.
Я из интернета нечего не загружаю, у меня все картинки в ресурсах находятся.

Re: java.lang.OutOfMemoryError

Добавлено: 16 апр 2014, 10:17
altwin
Lucifer777 писал(а):
altwin писал(а):Если вы хотите сохранить исходное изображение, создайте свою папку на sd карте и грузите туда оригиналы, перед тем, как показывать в любом случае придется делать resize. В этой теме: viewtopic.php?f=24&t=3856 указанны 3 довольно популярные библиотеки, вы можете на github посмотреть исходники и разобраться ,как работают они и соответсвенно, как делают в большинстве случаев.
Я из интернета нечего не загружаю, у меня все картинки в ресурсах находятся.
а какая разница? У вас все проще, меньше кода без http запросов.

Re: java.lang.OutOfMemoryError

Добавлено: 16 апр 2014, 12:27
Lucifer777
altwin писал(а):
Lucifer777 писал(а):
altwin писал(а):Если вы хотите сохранить исходное изображение, создайте свою папку на sd карте и грузите туда оригиналы, перед тем, как показывать в любом случае придется делать resize. В этой теме: viewtopic.php?f=24&t=3856 указанны 3 довольно популярные библиотеки, вы можете на github посмотреть исходники и разобраться ,как работают они и соответсвенно, как делают в большинстве случаев.
Я из интернета нечего не загружаю, у меня все картинки в ресурсах находятся.
а какая разница? У вас все проще, меньше кода без http запросов.

Ясно, спасибо, буду пробовать!