#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
.