This is a good question, a proper testing method for unit power/memory consumption. I believe there is one through instrumentation that allows you to access the free memory (I can't find it right now).
But I'd like to know this as well. On Tue, Apr 21, 2009 at 3:18 AM, Mariano Kamp <[email protected]>wrote: > Hi, > > I sometimes get bug reports that are caused by an OutOfMemory error. It > happens when creating a bitmap, but I am pretty sure that it is not the > bitmap size that is the real problem, because the instantiation of those > images happens > 100.000 times a day without an error report. Those png > images are of 4K size (on disk) anyway. > > Those bug reports are very infrequent, but still I would love to get rid > of them. I can't reproduce the memory growing over 10 MBs (actually way > less) when using the app myself and monitoring the memory consumption in > DDMS. I also, at no point in time, cache something or hold on to more than > one item (article in my case) at a time, except in one list. There the list > caches the visible components, which cannot amount to much too and is > default functionality from the Android framework. > > I meanwhile kind of ***suspect*** that maybe the WebView I embed does eat > up all the memory, because the page to display might be huge?! I don't know > though how to get closer to confirming that or any other possible cause. I > tried to use a ca. url that one user provided me with, but this also didn't > make the memory grow much. And a single page it is probably not a good > enough test case, as it doesn't account for what page was displayed before > and how the cache behaved. > > So I would like to gather more data when I capture an OutOfMemory and > create a bug report. > > The obvious thing would be to include the current memory consumption. > > Something like this? > > Runtime rt = Runtime.getRuntime(); > > Log.d("Memory", "Memory left=" > > + String.format("Memory free: %4.2fMB total: %4.2fMB max: %4.2fMB", > > rt.freeMemory() / 1024 / 1024.0, > > rt.totalMemory() / 1024 / 1024.0, > > rt.maxMemory() / 1024 / 1024.0)); > > Memory left=Memory free: 3.94MB total: 6.82MB max: 16.00MB (see > screenshot for DDMS at the same point in time) > > I am not sure though, if this of any value. When I get an OutOfMemory > error I would *expect* to get free: 0, total: 16, max 16. > I would still deploy that in a new version, just in case. Maybe my process > didn't even get 16 MB, because the phone was running low on memory as it is? > > Anything else I can measure of gather to get to the bottom of it? > > Cheers, > Mariano > > -- Android Version: sdk=2, release=1.1, inc=128600 > -- Thread State: RUNNABLE > -- NewsRob Version: 1.9.0/190 > -- Stacktrace: > java.lang.RuntimeException: Unable to start activity > ComponentInfo{com.newsrob/com.newsrob.ShowEntryActivity}: > android.view.InflateException: Binary XML file line #29: Error inflating > class java.lang.reflect.Constructor > at > android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2141) > at > android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2157) > at android.app.ActivityThread.access$1800(ActivityThread.java:112) > at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1581) > at android.os.Handler.dispatchMessage(Handler.java:88) > at android.os.Looper.loop(Looper.java:123) > at android.app.ActivityThread.main(ActivityThread.java:3739) > at java.lang.reflect.Method.invokeNative(Native Method) > at java.lang.reflect.Method.invoke(Method.java:515) > at > com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) > at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:497) > at dalvik.system.NativeStart.main(Native Method) > Caused by: android.view.InflateException: Binary XML file line #29: Error > inflating class java.lang.reflect.Constructor > at android.view.LayoutInflater.createView(LayoutInflater.java:512) > at > com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) > at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:562) > at android.view.LayoutInflater.rInflate(LayoutInflater.java:617) > at android.view.LayoutInflater.inflate(LayoutInflater.java:407) > at android.view.LayoutInflater.inflate(LayoutInflater.java:320) > at android.view.LayoutInflater.inflate(LayoutInflater.java:276) > at > com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:231) > at android.app.Activity.setContentView(Activity.java:1569) > at com.newsrob.ShowEntryActivity.onCreate(ShowEntryActivity.java:70) > at > android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122) > at > android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2104) > ... 11 more > Caused by: java.lang.reflect.InvocationTargetException > at android.widget.Button.<init>(Button.java:63) > at java.lang.reflect.Constructor.constructNative(Native Method) > at java.lang.reflect.Constructor.newInstance(Constructor.java:424) > at android.view.LayoutInflater.createView(LayoutInflater.java:499) > ... 22 more > Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget > at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) > at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:290) > at android.graphics.drawable.Drawable.createFromStream(Drawable.java:635) > at android.content.res.Resources.loadDrawable(Resources.java:1454) > at android.content.res.Resources.getDrawable(Resources.java:498) > at > android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:143) > at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:716) > at android.graphics.drawable.Drawable.createFromXml(Drawable.java:667) > at android.content.res.Resources.loadDrawable(Resources.java:1439) > at android.content.res.TypedArray.getDrawable(TypedArray.java:520) > at android.view.View.<init>(View.java:1693) > at android.widget.TextView.<init>(TextView.java:231) > at android.widget.Button.<init>(Button.java:67) > ... 26 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 -~----------~----~----~----~------~----~------~--~---

