开发者

Android Out Of Memory Exceptions

开发者 https://www.devze.com 2023-03-04 16:31 出处:网络
I have an application I am writing that is heavy with bitmaps. If you start the app, exit the app and come back into the app several times eventually you get a forced close because of an out of memory

I have an application I am writing that is heavy with bitmaps. If you start the app, exit the app and come back into the app several times eventually you get a forced close because of an out of memory condition.开发者_C百科

I know where the out of memory is happening and could do a try catch. The problem is that if I don't have the memory to run, what do I do? My app just doesn't work without the bitmaps, so I can't just not show them.

I have tried setting things to null when I get the onPause. I have tried doing finish in onPause. I did a lot of research an read many postings before writing this email and have tried the many things suggested.

The bottom line is that the memory I use just doesn't seem to be getting freed or something else is going on.

I tried using the adb shell cat /proc/meminfo command in between starts and stops and here is what I found:

MemTotal: 31348

Start app, everything working

MemTotal: 18180

Exit app

MemTotal: 20160

Start app, everything working

MemTotal: 12480

Exit app

MemTotal: 13740

Start app, everything working

MemTotal: 9600

Exit app

MemTotal: 10844

Start app, first memory exception, one of 5 bitmaps just doesn't show up, but no crash

MemTotal: 6224

Exit app

MemTotal: 7244

Start app, doesn't start, gets out of memory which causes an error that I catch, so exits

MemTotal: 7836

Start app, out of memory exception and Force Close, hit force close button

MemTotal: 31648

As you can see the memory is now finally released, but only after a force close.

It doesn't matter if I start and exit really fast or wait between each start and finish the same thing happens, so I can't just introduce a delay.

Is there a way to "force" a Force Close except not really show the message and not be an error condition? I thought that is what finish() was supposed to do, but it doesn't.

Thanks for any help or ideas I can try.


We had the same problem with our app. Unfortunately there is no 'silver bullet' to solve all of memory issues. Here are a couple of things you can try:

i) Use soft reference/ weak reference for the bitmaps you use.
ii) Recycle bitmaps in your onPause and decode them again in your onResume. A cache of soft referenced bitmaps will help.
iii) Consider using RGB_565 instead of ARGB_8888 (which is now the default in Gingerbread).
iv) Make sure that there are no leaks or multiple instances of your activity/activities.

Hope this helps.

0

精彩评论

暂无评论...
验证码 换一张
取 消