Hi! I got an ANR in an application which used the CursorAdapter, and I started thinking if it's allowed to be used or not. It's pretty common to create a ListActivity (or just an Activity with a ListView) and set a CursorAdapter as adapter to it. However when the data set changes, the CursorAdapter gets the callback and calls requery (of it's enabled of course). However this requery could result in a database access, which is really bad in the main thread (like in my case).
This is the stacktrace: android.database.sqlite.SQLiteDatabase.lock (SQLiteDatabase.java:378) android.database.sqlite.SQLiteQuery.fillWindow (SQLiteQuery.java:64) android.database.sqlite.SQLiteCursor.fillWindow (SQLiteCursor.java: 287) android.database.sqlite.SQLiteCursor.getCount (SQLiteCursor.java:268) android.database.CursorWrapper.getCount (CursorWrapper.java:70) android.database.MergeCursor.getCount (MergeCursor.java:61) android.widget.CursorAdapter.getCount (CursorAdapter.java:132) android.widget.HeaderViewListAdapter.getCount (HeaderViewListAdapter.java:132) android.widget.AdapterView$AdapterDataSetObserver.onChanged (AdapterView.java:782) android.database.DataSetObservable.notifyChanged (DataSetObservable.java:31) android.widget.BaseAdapter.notifyDataSetChanged (BaseAdapter.java:50) android.widget.CursorAdapter$MyDataSetObserver.onChanged (CursorAdapter.java:385) android.database.DataSetObservable.notifyChanged (DataSetObservable.java:31) android.database.AbstractCursor.requery (AbstractCursor.java:97) android.database.sqlite.SQLiteCursor.requery (SQLiteCursor.java:548) android.database.CursorWrapper.requery (CursorWrapper.java:211) android.database.MergeCursor.requery (MergeCursor.java:249) android.widget.CursorAdapter.onContentChanged (CursorAdapter.java:361) android.widget.CursorAdapter$ChangeObserver.onChange (CursorAdapter.java:377) android.database.ContentObserver$NotificationRunnable.run (ContentObserver.java:43) android.os.Handler.handleCallback (Handler.java:587) android.os.Handler.dispatchMessage (Handler.java:92) android.os.Looper.loop (Looper.java:123) android.app.ActivityThread.main (ActivityThread.java:3701) java.lang.reflect.Method.invokeNative java.lang.reflect.Method.invoke (Method.java:507) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:866) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:624) dalvik.system.NativeStart.main So, does this mean that simply using CursorAdapter (with autoRequery=true) is dangerous? If yes, what is the proper way to use it? Thanks in advance! /Pal Szasz -- 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