Cursor unsafe. Although I think that most of the time Cursor used only for “read access” to the data, it is more complex than that.
A brief explanation in Android docs describing Cursor :
This interface provides random read and write access to the result set returned by the database query.
So Cursor is not just data stored in an object. They take your place in the ResultSet through a database connection. ResultSet uses JDBC to access the database. Thus, Cursor only acts as a "Java-friendly" database call. Here is the Android for ResultSet docs:
When reading data using appropriate retrieval methods, the JDBC driver maps the SQL data retrieved from the database to a Java type, implied by the method called by the application. The JDBC specification has a table for SQL type mappings for Java types.
ResultSet maintains a database connection. Data is not “copied” to the interface (both Cursor and ResultSet are interfaces, not objects; some implementations can copy data, but I did not test it, because leaving Statement and ResultSet resources open through a closed Connection can cause problems with database resources).
Java provides an interface for JDBC to access the “result table” in the database for the ResultSet , as described in the Java docs here:
A data table representing a set of database results that is typically generated by executing a statement that queries the database.
http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
You cannot grant "database access" to a ContentProvider that died because there is no connection to the ResultSet table in the database, so Cursor should be deleted.
EDIT:
One comment suggests that Android does not use JDBC' or ResultSet` - the SQLite implementation for Android is a very similar implementation for JDBC, and the concepts are essentially the same without convenient names and descriptions.
The fact that Android uses a custom implementation makes it difficult to describe the problem, although I should have made a reference to this in my original post. Here is a list of Google Groups about JDBC status and SQLite implementation on Android, if more detailed links and information are required:
https://groups.google.com/forum/#!topic/android-developers/zz3qlNL2JDw
From the discussion, you could probably ask Jörg Pleumann in more detail ...