Я не думаю, что есть способ получить эту информацию напрямую. Однако вы можете создать собственный подкласс Cursor
, который отслеживает открытые в данный момент Cursor
s в статическом списке.
Например (псевдокод, не тестировался):
public class TrackingCursor extends SQLiteCursor {
private static List<Cursor> openCursors = new LinkedList<Cursor>();
public TrackingCursor(SQLiteDatabase db, SQLiteCursorDriver driver,
String editTable, SQLiteQuery query) {
super(db, driver, editTable, query);
openCursors.add(this);
}
public void close() {
openCursors.remove(this);
}
public static List<Cursor> getOpenCursors() {
return openCursors;
}
}
Вам необходимо предоставить свою собственную фабрику для БД, чтобы ваши TrackingCursor
s были созданы вместо простых SQLiteCursor
s.
public class TrackingCursorFactory implements SQLiteDatabase.CursorFactory {
Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery,
String editTable, SQLiteQuery query) {
return new TrackingCursor(db, masterQuery, editTable, query);
}
}
И, наконец, скажите БД использовать эту фабрику, передав фабрику в качестве параметра при вызове openDatabase
.