What are the type and size in pixels of your drawable ?

As I understand it, Android uncompress jpegs to raw bytes when
decoding images.

Say if your Image is a big(huge ?) and highly compressed JPEG, then
possibly you could run into an OOM.


Just an hypothesis, Although exactly 4500000-byte sounds weird :s

If this is the case, you can either reduce your drawable size or load
it programmatically instead of via XML and then use
BitmapFactory.Options.inSampleSize or inTempStorage :
http://developer.android.com/intl/de/reference/android/graphics/BitmapFactory.Options.html

Yahel



On 6 avr, 07:47, patbenatar <[email protected]> wrote:
> Hey Androiders!
>
> I'm running into a strange intermittent issue with my app.. Basically
> every time the app resumes I check if its internal data [fetched from
> a Web API] is outdated and if it is I push off to my Splash/Loader
> activity while I fetch new data. This works great ALMOST all the
> time... Then every once in a while the system gives me a
> java.lang.RuntimeException < android.view.InflateException <
> java.lang.reflect.InvocationTargetException <
> java.lang.OutOfMemoryError [that's the simplified stack trace]..
>
> Here is the whole stack trace:
>
> E/dalvikvm-heap(12914): Heap Massage needed (4500000-byte external
> allocation too big)
> E/dalvikvm-heap(12914): Full GC (don't collect SoftReferences)
> I/ActivityManager( 1078): Process com.amazon.mp3 (pid 12917) has died.
> D/dalvikvm(12914): GC freed 188 objects / 10224 bytes in 54ms
> E/dalvikvm-heap(12914): Full GC (collect SoftReferences)
> D/dalvikvm(12914): GC freed 47 objects / 1968 bytes in 56ms
> E/dalvikvm-heap(12914): Try and trim Heap Source
> E/dalvikvm-heap(12914): Heap Massage was unsuccessful for 4500000-
> bytes!
> E/dalvikvm-heap(12914): Heap Massage has failed...
> E/        (12914): VM won't let us allocate 4500000 bytes
> D/AndroidRuntime(12914): Shutting down VM
> W/dalvikvm(12914): threadid=3: thread exiting with uncaught exception
> (group=0x4001b178)
> E/AndroidRuntime(12914): Uncaught handler: thread main exiting due to
> uncaught exception
> E/AndroidRuntime(12914): java.lang.RuntimeException: Unable to start
> activity ComponentInfo{com.apwit.grubtruck/
> com.apwit.grubtruck.Splash}: android.view.InflateException: Binary XML
> file line #8: Error inflating class <unknown>
> E/AndroidRuntime(12914):        at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:
> 2496)
> E/AndroidRuntime(12914):        at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:
> 2512)
> E/AndroidRuntime(12914):        at android.app.ActivityThread.access
> $2200(ActivityThread.java:119)
> E/AndroidRuntime(12914):        at android.app.ActivityThread
> $H.handleMessage(ActivityThread.java:1863)
> E/AndroidRuntime(12914):        at
> android.os.Handler.dispatchMessage(Handler.java:99)
> E/AndroidRuntime(12914):        at android.os.Looper.loop(Looper.java:123)
> E/AndroidRuntime(12914):        at
> android.app.ActivityThread.main(ActivityThread.java:4363)
> E/AndroidRuntime(12914):        at
> java.lang.reflect.Method.invokeNative(Native Method)
> E/AndroidRuntime(12914):        at
> java.lang.reflect.Method.invoke(Method.java:521)
> E/AndroidRuntime(12914):        at com.android.internal.os.ZygoteInit
> $MethodAndArgsCaller.run(ZygoteInit.java:860)
> E/AndroidRuntime(12914):        at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
> E/AndroidRuntime(12914):        at dalvik.system.NativeStart.main(Native
> Method)
> E/AndroidRuntime(12914): Caused by: android.view.InflateException:
> Binary XML file line #8: Error inflating class <unknown>
> E/AndroidRuntime(12914):        at
> android.view.LayoutInflater.createView(LayoutInflater.java:513)
> E/AndroidRuntime(12914):        at
> com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayo 
> utInflater.java:
> 56)
> E/AndroidRuntime(12914):        at
> android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
> E/AndroidRuntime(12914):        at
> android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
> E/AndroidRuntime(12914):        at
> android.view.LayoutInflater.inflate(LayoutInflater.java:407)
> E/AndroidRuntime(12914):        at
> android.view.LayoutInflater.inflate(LayoutInflater.java:320)
> E/AndroidRuntime(12914):        at
> android.view.LayoutInflater.inflate(LayoutInflater.java:276)
> E/AndroidRuntime(12914):        at
> com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.jav a:
> 198)
> E/AndroidRuntime(12914):        at
> android.app.Activity.setContentView(Activity.java:1622)
> E/AndroidRuntime(12914):        at
> com.apwit.grubtruck.Splash.onCreate(Splash.java:45)
> E/AndroidRuntime(12914):        at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:
> 1047)
> E/AndroidRuntime(12914):        at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:
> 2459)
> E/AndroidRuntime(12914):        ... 11 more
> E/AndroidRuntime(12914): Caused by:
> java.lang.reflect.InvocationTargetException
> E/AndroidRuntime(12914):        at
> android.widget.ImageView.<init>(ImageView.java:105)
> E/AndroidRuntime(12914):        at
> java.lang.reflect.Constructor.constructNative(Native Method)
> E/AndroidRuntime(12914):        at
> java.lang.reflect.Constructor.newInstance(Constructor.java:446)
> E/AndroidRuntime(12914):        at
> android.view.LayoutInflater.createView(LayoutInflater.java:500)
> E/AndroidRuntime(12914):        ... 22 more
> E/AndroidRuntime(12914): Caused by: java.lang.OutOfMemoryError: bitmap
> size exceeds VM budget
> E/AndroidRuntime(12914):        at
> android.graphics.Bitmap.nativeCreate(Native Method)
> E/AndroidRuntime(12914):        at
> android.graphics.Bitmap.createBitmap(Bitmap.java:468)
> E/AndroidRuntime(12914):        at
> android.graphics.Bitmap.createBitmap(Bitmap.java:435)
> E/AndroidRuntime(12914):        at
> android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)
> E/AndroidRuntime(12914):        at
> android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488)
> E/AndroidRuntime(12914):        at
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462)
> E/AndroidRuntime(12914):        at
> android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:
> 323)
> E/AndroidRuntime(12914):        at
> android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:
> 697)
> E/AndroidRuntime(12914):        at
> android.content.res.Resources.loadDrawable(Resources.java:1705)
> E/AndroidRuntime(12914):        at
> android.content.res.TypedArray.getDrawable(TypedArray.java:548)
> E/AndroidRuntime(12914):        at
> android.widget.ImageView.<init>(ImageView.java:115)
> E/AndroidRuntime(12914):        ... 26 more
>
> So up there towards the top I see: E/        (12914): VM won't let us
> allocate 4500000 bytes
>
> But why on earth does the system need to allocate 4.5MB just to
> display a real simple XML view that loads up two small enough drawable
> resources [one is 66KB and the other 135KB].. I'm also using an
> animation+interpolator to rotate the 66KB loading spinner image.
>
> The only error in that stack trace that comes from my package is line
> 2 of my Splash/Loader's onCreate:
> setContentView(R.layout.splash);
>
> So then I go and analyze my XML layout file splash.xml, and in the
> stack it also tells us: android.view.InflateException: Binary XML file
> line #8: Error inflating class <unknown> -- so I look at line 8 of
> splash.xml and that is the first line of my <ImageView/> element that
> loads up the 135KB.. Here is my XML file:
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/
> android"
>             android:orientation="vertical"
>             android:layout_width="fill_parent"
>             android:layout_height="fill_parent">
>
>         <ImageView android:id="@+id/splash_graphic"
>                         android:layout_width="fill_parent"
>                         android:layout_height="fill_parent"
>                         android:scaleType="centerCrop"
>                         android:src="@drawable/grub_truck_splash" />
>
>         <LinearLayout
>                 android:id="@+id/splash_loader_container"
>                 android:layout_width="wrap_content"
>             android:layout_height="wrap_content"
>             android:layout_alignParentBottom="true"
>             android:layout_centerHorizontal="true"
>             android:paddingBottom="80dip"
>             >
>                 <ImageView
>                         android:id="@+id/splash_loader"
>                                 android:src="@drawable/greenloader"
>                                 android:layout_width="wrap_content"
>                                 android:layout_height="wrap_content"
>                                 />
>
>         </LinearLayout>
>
>         <LinearLayout
>                 android:id="@+id/msg_updating_container"
>                 android:layout_width="wrap_content"
>             android:layout_height="wrap_content"
>             android:layout_alignParentBottom="true"
>             android:layout_centerHorizontal="true"
>             android:paddingBottom="35dip"
>             >
>                 <TextView
>                         android:id="@+id/msg_updating"
>                                 android:layout_width="wrap_content"
>                                 android:layout_height="wrap_content"
>                                 android:text="@string/splash_msg_updating"
>                                 android:textColor="#333"
>                                 android:textStyle="bold"
>                                 />
>
>         </LinearLayout>
>
> </RelativeLayout>
>
> Sorry to be pasting in so many lines... I'm just thinking they may be
> necessary to debug this problem..
>
> What's weird to me is that this activity works most of the time.. And
> in the cases that it does crash on an out of memory error like above,
> it's not like I'm running any heavy apps before trying to resume my
> app.... I also don't believe I've ever launched the Amazon MP3 app yet
> above the stack trace in the above log, it frees up Amazon MP3's
> resources.....
>
> Strange...
>
> Thanks for any help!!
>
> -Nick

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

To unsubscribe, reply using "remove me" as the subject.

Reply via email to