Получение исключения OutOfMemory при работе с 8900 blackberry

#blackberry #blackberry-simulator

#ежевика #blackberry-симулятор

Вопрос:

Я разработал одно приложение на blackberry. Оно отлично работает на 8520 и 9000, но когда я тестирую его на 8900. Через некоторое время оно выдает исключение нехватки памяти. Я получил следующее сообщение при отладке JDE

 OutOfMemoryError
No detail message
net_rim_cldc-6(4A0CB600)
 Bitmap
 <init>
 0x8822

net_rim_cldc-6(4A0CB600)
 Bitmap
 <init>
 0x84A5

net_rim_cldc-7(4A0CB600)
 PNGEncodedImage
 getBitmapImpl
 0x39BD

net_rim_cldc-7(4A0CB600)
 EncodedImage
 getBitmap
 0x10F6

net_rim_cldc-7(4A0CB600)
 EncodedImage
 getBitmap
 0x10CE

Triton-5(4DA2E09E)
 Utility
 resizeAlert
 0x7F9D

Triton-1(4DA2E09E)
 AlertScreen
 paintBackground
 0x938

net_rim_cldc-8(4A0CB600)
 Field
 applyTheme
 0x1071

net_rim_cldc-8(4A0CB600)
 Field
 paintSelf
 0x26F0

net_rim_cldc-8(4A0CB600)
 Manager
 paintSelf
 0x9230

net_rim_cldc-9(4A0CB600)
 Screen
 doPaint0
 0x41D3

net_rim_cldc-9(4A0CB600)
 UiEngineImpl
 <private>
 0xB576

net_rim_cldc-9(4A0CB600)
 UiEngineImpl
 doPainting
 0x93AB

net_rim_cldc-9(4A0CB600)
 UiEngineImpl
 pushModalScreen
 0xA983

net_rim_cldc-9(4A0CB600)
 UiApplication
 pushModalScreen
 0x9089

Triton-1(4DA2E09E)
 AlertScreen
 show
 0x836

Triton-2(4DA2E09E)
 CloseCall
 update
 0xBDF

Triton-5(4DA2E09E)
 Request$4
 run
 0x638B

net_rim_cldc-6(4A0CB600)
 Application
 dispatchInvokeLater
 0xAD1

net_rim_cldc-6(4A0CB600)
 Application
 processNextMessage
 0x127A

net_rim_cldc-6(4A0CB600)
 Application
 enterEventDispatcher
 0xA76

Triton(4DA2E09E)
 TritonClient
 runApp
 0x3800

Triton(4DA2E09E)
 TritonClient
 main
 0x3825
  

Я использовал постоянную базу данных, потоки для HTTP-соединения. Я не совсем понимаю, почему оно появляется только на 8900.

Заранее спасибо…

Ответ №1:

Использует ли ваше приложение какие-либо ресурсы изображения в формате PNG? Похоже, что это так, и похоже, что какое-то изображение в формате PNG достаточно велико, чтобы вызвать, OutOfMemoryError когда Bitmap создается экземпляр из изображения. Мой опыт разработки говорит о том, что это зависит от версии ОС, модели устройства и текущего состояния оперативной памяти устройства. Поэтому не удивляйтесь, что это работает на одном устройстве и не работает на другом. Чтобы предотвратить это, OutOfMemoryError просто убедитесь, что ваши Bitmap размеры не превышают удвоенные размеры дисплея. Например, если ваш дисплей имеет размер 320×240, то не используйте растровые изображения размером более 640×480.

Комментарии:

1. Привет, Архимед, я не использую изображения большего размера, но использую большое количество изображений небольшого размера, но такое же количество изображений хорошо работает на 9000. Может ли это быть проблемой?

2. Я думаю, это может быть связано с тем, как вы обрабатываете изображения. Если, например, вы сохраняете статические ссылки на большое количество растровых изображений, то я думаю, что в какой-то момент это может привести к OutOfMemoryError .