Thursday, June 10, 2010

[android-developers] Re: OutOfMemoryError

First you need to figure out what is taking up all the space in your
memory as well as what is causing the OOM. Like is OOM caused when you
switch between two activities over and over again? or if you rotate
the phone over and over causing the activity to be re-created over and
over. In which case you are probably leaking a context. Or are you
running out of memory because you are loading just too many images? I
don't think you've really given us enough information to help. If you
use DDMS to inspect your heap, what's taking up all the space? If it's
images, how big are the images? Remember in order for them to be drawn
they need to be *uncompressed* into device's RAM. at say 24 bits per
pixel, if you had a png that was mostly white so compressed very well
you might have a 200KB png file that actually is using 6MB of RAM on
your device. It's just too big, and you might not think about it
because if you come from a desktop PC mindset it's just a 200KB png
file in your mind. At this point I am guessing that either:

A) you are leaking a context so the images aren't being recycled
B) your images are too large uncompressed

But without more information it's hard to be sure

-E

On Jun 10, 7:28 am, svebee <sven.kapud...@gmail.com> wrote:
> hello, as I'm beginner in Android I have problem with memory - after
> only 2-3 minutes I get Force Close and outOfMemory Error.
>
> I have only onCreate (I know, stupid, but I didn't knew for anything
> else as I started only few weeks ago) and inside I have...
>
> @Override
>  public void onCreate(Bundle savedInstanceState) {
>   super.onCreate(savedInstanceState);
>   setContentView(R.layout.main);
>
>   many lines of code...manipulating with SQLite databases...
>
> }
>
> inside main XML layout I have many images, small, big (background) and
> so on...How can I on every onCreate "delete" all content from memory
> that was before in it - so when I open activity again, it deletes all
> images and everything out and insert the new (old) one inside.
> "Little" awkward but that's only thing I have on mind.
>
> Also, inside "many lines of code" I don't declare any images!
>
> Or simply, how can I "bypass" outOfMemoryError? Do I have to do
> something like this?
>
>  @Override
>      public void onCreate(Bundle savedInstanceState) {
>       super.onCreate(savedInstanceState);
>
>         BitmapFactory.Options options=new BitmapFactory.Options();
>         options.inSampleSize = 8;
>         Bitmap buildingBitmap =
> BitmapFactory.decodeResource(null,R.drawable.background,options);
>
> if (buildingBitmap != null)
>         {
>         buildingBitmap.recycle();
>         System.gc();
>         buildingBitmap = null;
>         }
>
>       setContentView(R.layout.main);
>
>       many lines of code...manipulating with SQLite databases...
>
>     }
>
> or...? Also on other activity is everything "the same" except I have
> multiple overlays, how can I "erase" (recycle) them also? Thank you
> for any help.
>
> *currently, I'm not searching for fastest, most "correct" or better
> solution, I just want something that it's not crashing all the time

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment