[mono-android] 4.2.2 Samsung Galaxy SII Turns off at runtime
Jonathan Pryor
jonp at xamarin.com
Tue Jun 12 13:58:43 UTC 2012
On Jun 12, 2012, at 7:19 AM, SweetLou wrote:
> I've been developing for my Motorola XOOM and my Samsung. Have for the past week just been debugging on the XOOM. Note that my application runs perfectly fine on it without crashes/freezes. However on my Samsung, the device freezes for a random amount of time for like 1 second, then actually
> dies. Only output i get from debugger is The program 'Mono' has exited with code 255 (0xff).
Two things:
1. What is the output of the following command on each of your devices?
adb shell getprop dalvik.vm.heapsize
I'll bet that they're not the same, and that the Xoom has a larger value than your Samsung.
2. View the Android Debug Log output:
http://docs.xamarin.com/android/advanced_topics/android_debug_log
I suspect that the Android Debug Log will contain GC_EXTERNAL_ALLOC messages, stating that it's run out of heap space, e.g.
http://lists.ximian.com/pipermail/monodroid/2012-April/009717.html
If this is correct, the solution is to reduce lifetime of the managed wrapper (if possible; it should be here) by calling Dispose():
http://docs.xamarin.com/android/advanced_topics/garbage_collection
> I believe it's coming from this code snippet. My application is a image gallery in which i fetch byte arrays from a service.
>
> // Code
...
> //Decode the byte[] to the Bitmap
> bitmap = Bitmap.CreateScaledBitmap(BitmapFactory.DecodeByteArray(byteArray, 0, byteArray.Length, op), imageWidth, imageHeight, true);
What is the lifetime of the `bitmap` instance, and does it need to live that long? Rephrased, what are you doing with it, and do you need to maintain a C# reference to it?
If you're doing something akin to:
bitmap = GetBitmap ();
canvas.SetBitmap (bitmap);
// never use bitmap again...
then you should Dispose() of the bitmap ASAP:
using (bitmap = GetBitmap ())
canvas.SetBitmap (bitmap);
Disposing of the instance will allow Dalvik to collect the bitmap instance faster, and as Bitmap instances can be very large, allowing Dalvik to collect the Java-side data will reduce your memory footprint (and hopefully keep your app from crashing).
- Jon
More information about the Monodroid
mailing list