One possible workaround that comes to mind is to remove your listener
in your activity's onPause or onStop, so that it won't fire anymore
when the activity is shutting down. Though having to add extra code to
make managed cursors work for you kind of defeats the purpose, I
suppose.
Can you please file a bug at http://b.android.com ?



On Sat, Mar 7, 2009 at 4:50 PM, Jeffrey Yasskin <jyass...@gmail.com> wrote:
>
> Activity.performStop() contains the following loop (around line 3394
> in the 1.0 SDK release and at
> http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/app/Activity.java;h=4dc4b6a48b85f9caad4234b8e29fafdc9260840c;hb=HEAD#l3504):
>
>            final int N = mManagedCursors.size();
>            for (int i=0; i<N; i++) {
>                ManagedCursor mc = mManagedCursors.get(i);
>                if (!mc.mReleased) {
>                    mc.mCursor.deactivate();
>                    mc.mReleased = true;
>                }
>            }
>
> In my app, mc.mCursor.deactivate() calls (indirectly)
> SimpleCursorAdapter.notifyDataSetInvalidated(), which calls
> (indirectly) AdapterView.fireOnSelected(), which calls my
> OnItemSelectedListener, which calls stopManagingCursor(), which
> reduces the size of mManagedCursors, which makes the ArrayList.get()
> call throw on the next iteration.
>
> I'm calling stopManagingCursor to avoid the crash described at <http://
> groups.google.com/group/android-developers/browse_thread/thread/
> f6fabc180e8b517a/c04691d80f1e9135?lnk=gst&#c04691d80f1e9135> (and a
> few other posts you can find by searching this group for
> "SQLiteClosable").
>
> I suspect this is a bug in Activity.performStop, which shouldn't
> assume mManagedCursors is constant through a call to a user-provided
> callback. Until the Android developers can fix the bug, I'm looking
> for a workaround. Should I just abandon managed cursors, which don't
> seem to work well with CursorAdapters? Is there a good way to prevent
> my OnItemSelectedListener from being called during performStop()? Any
> other ideas?
>
> Thanks,
> Jeffrey
> >
>

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

Reply via email to