Skip to first unread message

Jordi Segura

unread,
Nov 11, 2017, 11:55:53 AM11/11/17
to MIT App Inventor Forum
java.lang.OutOfMemoryError: Failed to allocate a 3845964 byte allocation with 232128 free bytes and 226KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:890)
at android.graphics.Bitmap.createBitmap(Bitmap.java:867)
at android.graphics.Bitmap.createBitmap(Bitmap.java:798)
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:674)
at com.google.appinventor.components.runtime.util.MediaUtil$2.run(MediaUtil.java:476)
at java.lang.Thread.run(Thread.java:760)


This is the code of the issue. I've been reading about this and I found a solution which was reduce the images' size. Now, the code still appearing and I don't know what can I do.
I've got a lot of images in the app but they are necessary. I also did that every time there's a switch of screen the current screen was closed to release space.
Someone can tell me a quick solution?

Taifun

unread,
Nov 11, 2017, 12:07:32 PM11/11/17
to MIT App Inventor Forum
see the following general tips and in your case especially #1 and #2

  1. Use different screens wisely
    Before starting to create another screen, first you should think about is it really necessary? See also Building apps with many screens and SteveJG's post about advantages/disadvantagesbecause in only one screen you also can use vertical arrangements to simulate different screens, just set the arrangements to visible = true/false as needed... See also Martyn_HK's example about how to use Tabs in App Inventor and another example from Cyd

    If you decided to use different screens, then you should switch them correctly, else you will run out of memory after a while...      
    The recommended method of switching screens in App Inventor

  2. App Inventor works best if you use images whose size matches the size you want them to appear on your screen. If you import larger images into your app, your app may run out of system memory. Using Images with App Inventor

    by Italo: First, you need to understand that the file size of an image is not the amount of memory it uses when it's being displayed. The file size is the compressed size, much like a zip or rar file. When viewed, the image needs to be decompressed.
    For example, if your image says its file size is 100 kb, and its dimensions are 1024 x 768, 32 bit color, then that image uses over 3 mb of RAM (not 100 kb!) when you show it on the screen. ((1024 * 768 ) * 32) / 8 = 3,145,728 kb (3 mb)
    Now, this is a mistake most people make when using arrangements as "virtual screens": They set different image components with their images loaded but hidden, instead of having only one image component and changing the picture according to the user's selection or app events, not knowing that apparently the hidden image components are also using the ram, (yes, even though they are invisible!).

  3. Avoid redundancy
    Probably it helps to read chapter 19 - 21 in Dave's book http://www.appinventor.org/book2 to get an idea how to do DRY programming with App Inventor - Don't repeat yourself 

  4. See SteveJG's monster list of tips and tricks

  5. How to overcome the App Inventor project limit of 10 MB

  6. Backup your project frequently
Taifun

Trying to push the limits of App Inventor! SnippetsTutorials and Extensions from Pura Vida Apps by  Taifun. 

Reply all
Reply to author
Forward
0 new messages