Thanks Romain! Some great info in your articles on Optimization! A quick question: how does the DDMS Allocation Manager help me out if it doesn't tell me any stack traces in my package? It seems the whole trace is from Android and Java stuff...
-Nick On Apr 6, 9:59 pm, Romain Guy <[email protected]> wrote: > It looks like your application is leaking memory somehow. You can > check out the various articles on the subject available at > android-developers.blogspot.com. > > > > On Tue, Apr 6, 2010 at 9:55 PM, patbenatar <[email protected]> wrote: > > Romain- Thanks so much for your response! That helps me understand the > > memory usage amount... What I don't get is why would Android not be > > able to free up 4MB of RAM for me? Isn't memory Android's job? My > > drawable is only referenced once, in my XML, and that XML is only > > being loaded in one Activity's onCreate. That Activity may run > > multiple times in one run of the app, but it always finishes and > > should therefore be destroyed by the system, removing all pointers to > > the View and the Drawable in it, and on the next GC run it should be > > freed.. At least that's the theory.... Am I missing something? > > > Android is surely capable of handling a 4MB drawable in RAM, is it > > not? Maybe there is a way I can compress this image? I hope to > > maintain full-resolution on the hi-dpi devices and it needs to fill > > the screen in both landscape and portrait. I could shrink it down to > > 854x854 as the minimum dimension to make it fit perfectly on the > > Droid's pixel-packed screen... > > > Thanks guys! > > Nick > > > On Apr 6, 6:19 pm, Romain Guy <[email protected]> wrote: > >> A 1000x1000 32 bits image takes 4 MB in RAM :) > > >> On Tue, Apr 6, 2010 at 6:10 PM, patbenatar <[email protected]> wrote: > >> > Thanks for your support, Yahel. The 135KB image is 1000x1000 pixels > >> > [quite a large canvas], but this is to ensure it looks great on hi-dpi > >> > screens at both portrait and landscape and at any sort of aspect > >> > ratio.. I'm also using android:scaleType="centerCrop" in my XML > >> > markup ... It's a PNG, as well. I saved it from Photoshop using "Save > >> > As..." not "Save For Web & Devices..." [should I be using the > >> > latter? .. either way its just a PNG file, I think "Save For Web & > >> > Devices" just compresses it more]... > > >> > -Nick > > >> > On Apr 6, 2:20 am, Yahel <[email protected]> wrote: > >> >> 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/Bitma... > > >> >> 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 > > ... > > read more » -- 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.

