I checked once again. There were a couple of "recycle()" that I didn't find the first time I searched --my Eclipse sometimes lacks of memory for this kind of tasks, it seems. I searched for the call among my files with another app, and find the culprit on the onPause() of one of de Fragments. Thanks!
Marina On Tue, Mar 19, 2013 at 1:48 PM, Marina Cuello <[email protected]>wrote: > I did. I changed some stuff to avoid out of memory errors --just for debug > sake, can't be done in the working app-- and then commented the calls and > the exception is thrown anyway. It seems like something outside my code is > trying to recycle some bitmap. > > Marina > > > On Mon, Mar 18, 2013 at 4:19 PM, bob <[email protected]> wrote: > >> Why don't you take out the recycle() calls altogether and see if it works? >> >> Even if you assign after recycling, the following could happen: >> >> >> >> *bitmap.recycle();* >> >> * >> * >> >> *---- thread switch ----* >> >> * >> * >> >> *other thread tries to use bitmap* >> >> >> >> >> On Monday, March 18, 2013 12:50:37 PM UTC-5, Marina Cuello wrote: >>> >>> Hi! >>> I'm having a weird problem with one of my apps. I'll try later to >>> extract some code and make a sample project to share if it's useful but by >>> now I'm just asking to see if anyone found this one or can give me a hint >>> on how to tackle it. >>> >>> I have two activities. >>> >>> Activity A extends SherlockActivity from ActionBarSherlock and haves a >>> GridView on it. The grid items have an ImageButton. When you press on the >>> ImageButton, it calls an instance of Activity B. >>> >>> Activity B extends **SherlockFragmentActivity (ActionBarSherlock >>> again), with a ViewPager on it. The fragments have a very complex layout. >>> >>> My Activity B has a menu with only one item. The item is set-up on >>> onOptionsItemSelected so it simply calls "onBackPressed()". That one calls >>> "super.onBackPressed()" right away. I've only overridden it for debugging >>> purposes. >>> >>> I tested it on some Jelly Bean devices and on a couple Gingerbread ones >>> (I'm using some co-workers phones as test devices :)). On Jelly Bean it's >>> ok. But in Gingerbread I've met a weird behaviour. >>> >>> When I'm on B, and press the back button on the device, it closes B and >>> goes normally to A. But, if I press the option on the menu, I've got a >>> "force close" message and I've got the following log: >>> >>> java.lang.RuntimeException: Canvas: trying to use a recycled bitmap >>> android.graphics.Bitmap@**2b021388 >>> at android.graphics.Canvas.**throwIfRecycled(Canvas.java:**955) >>> at android.graphics.Canvas.**drawBitmap(Canvas.java:1044) >>> at android.graphics.drawable.**BitmapDrawable.draw(** >>> BitmapDrawable.java:325) >>> at android.widget.ImageView.**onDraw(ImageView.java:881) >>> at android.view.View.draw(View.**java:6986) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1739) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1737) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.View.draw(View.**java:6989) >>> at android.widget.FrameLayout.**draw(FrameLayout.java:361) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1739) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.View.draw(View.**java:6989) >>> at android.widget.FrameLayout.**draw(FrameLayout.java:361) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1739) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1737) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.View.draw(View.**java:6989) >>> at android.support.v4.view.**ViewPager.draw(ViewPager.java:**1923) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1739) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1737) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1737) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1737) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.ViewGroup.**drawChild(ViewGroup.java:1737) >>> at android.view.ViewGroup.**dispatchDraw(ViewGroup.java:**1466) >>> at android.view.View.draw(View.**java:6989) >>> at android.widget.FrameLayout.**draw(FrameLayout.java:361) >>> at com.android.internal.policy.**impl.PhoneWindow$DecorView.** >>> draw(PhoneWindow.java:1882) >>> at android.view.ViewRoot.draw(**ViewRoot.java:1544) >>> at android.view.ViewRoot.**performTraversals(ViewRoot.**java:1280) >>> at android.view.ViewRoot.**handleMessage(ViewRoot.java:**1882) >>> at android.os.Handler.**dispatchMessage(Handler.java:**99) >>> at android.os.Looper.loop(Looper.**java:130) >>> at android.app.ActivityThread.**main(ActivityThread.java:3701) >>> at java.lang.reflect.Method.**invokeNative(Native Method) >>> at java.lang.reflect.Method.**invoke(Method.java:507) >>> at com.android.internal.os.**ZygoteInit$**MethodAndArgsCaller.run(** >>> ZygoteInit.java:866) >>> at com.android.internal.os.**ZygoteInit.main(ZygoteInit.**java:624) >>> at dalvik.system.NativeStart.**main(Native Method) >>> >>> The stack seems to relate to my Activity B structure. My app loads puts >>> large images on screen, so I have a couple "recycle()" calls on the >>> fragments that take part of Activity B, but they're all inside >>> "!bitmap.isRecycled()" conditions, and they're all around the first steps >>> on the activity and fragments life cycle. Anyway, there is no recycle() >>> call in my whole project that it's not followed by some assignation, either >>> with null or with some generated bitmap. >>> >>> When I debugged the exception didn't fire there. It just appears to be >>> "nowhere", jumping outright from the last line on my "onPause()" on >>> Activity B to the runtime exception. >>> >>> To add some debug chance, I've set a handler with ** >>> setDefaultUncaughtExceptionHan**dler to check what the behaviour would >>> be after the Exception is thrown, and what I see is: >>> >>> * In a Samsung device with a Mod Gingerbreas, first the option on the >>> menu on Activity B disappearing, then the Activity B dissapearing into to >>> background, a black screen and just a couple seconds later I get an ANR. >>> * In an unrooted Sony device , I've got to the Activity A screen looking >>> just as if everything is OK, but there is no responsiveness at all and soon >>> I got to the ANR too. >>> >>> I know my question it's really feeble, but I just can't see how to find >>> where the exception is throwing. Any clues? >>> >>> Thanks! >>> >>> Marina >>> >>> >>> >>> >>> -- >> -- >> 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 >> --- >> You received this message because you are subscribed to the Google Groups >> "Android Developers" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > -- -- 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 --- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

