| |||||||
Das Thema "Cursor schließen" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android-Hilfe.de Mitglied Registriert seit: 31.10.2011
Beiträge: 85
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
| in meiner App habe ich mehrere Klassen wo ich auf die Datenbank zugreife. in jeder Klasse habe ich die Funktion onDestroy () umgeschrieben in @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); c.close(); baseHelper.close(); } das funktioniert aber, ich kriege komischerweise nur bei einer Klasse 02-09 14:03:16.229: E/Database(2219): close() was never explicitly called on database '/data/data/de.meinautohaus/databases/autohausDB.db' wobei die Funktion onDestroy () auch in der Klasse ist. Bei allen anderen Klassen klappt es ohne Probleme |
| | |
| | #2 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Ist diese eine Klasse auch eine Activity?
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| | #4 (permalink) |
| Fortgeschrittenes Mitglied Modell: Samsung Galaxy S und Galaxy 5 Registriert seit: 31.03.2011
Beiträge: 480
Abgegebene Danke: 35
Erhielt 89 Danke für 73 Beiträge
|
Führe Code: super.onDestroy() |
| | |
| | #5 (permalink) |
| Android-Hilfe.de Mitglied Modell: Acer Iconia A100 Registriert seit: 28.10.2011
Beiträge: 127
Abgegebene Danke: 15
Erhielt 13 Danke für 11 Beiträge
|
Auf stackoverflow.com gibt es unzählige Fragen zu dem Thema. Wundert mich dass dieses Thema hier so selten auftaucht. Im Prinzip gehts darum, dass Du einen Cursor oder db leak hast. Klassischer Memoryleak. Da Java einen garbage collector hat, ist dass natürlich kein fataler Fehler, allerdings denke ich schon, dass Du den beheben solltest. Erstmal: Dieser Fehler taucht erst im Error Log auf seit startManagingCursor(Cursor cursor) deprecated ist. (Seit Honeycomb). Bis Honeycomb sollte obige Methode den Cursor an den Lebenszyklus der Activity binden. Dadurch sollte das Schliessen des Cursor automatisch geschehen. Hat bei mir (und wohl auch bei anderen) nie richtig funtioniert, daher wurde die Methode deprecated. Stattdessen soll jetzt die CursorLoader API verwendet werden (ab Honeycomb) und für ältere API Levels in Verbindung mit der Android Combatibility Library (und Reflections API). Das finde ich aber ziemlich Overkill. Zu dem gilt die Reflections API nicht als besonders performant. Leider habe ich für diesen Error keine richtige 100% Lösung gefunden, ausser folgende: db open cursor query Array mit cursor daten füllen cursor close db close Array mittels ArrayAdapter an die ListView binden Alles unmittelbar, so hast Du 100% Kontrolle das nix leaked. Hat natürlich einen massiven Nachteil: Listviews können dann natürlich nicht direkt mit Cursor gefüllt werden. Muss dann einen Array mit dem Cursor füllen und den Array via ArrayAdapter mit der ListView. Nix mit Live Data! Bei reinem Lesezugriff funktioniert das natürlich, und Du brauchst dann auch keinen SimpleCursorAdapter mehr. (Der ist nähmlich seit Honeycomb auch deprecated) . Zweiter Nachteil natürlich: Das Öffnen der db und des cursor ist eine teuere Operation. Wenn Du das oft machen musst, natürlich suboptimal. Vorteile: Keine Cursor oder db Leaks mehr und keine Errors im Log. Keine verwendung von deprecated Methoden oder Klassen. Wenn hier jemand weiss, wie man den Cursor/db elegant ohne Leaks an den Lebenszyklus bindet, wäre ich für Erleuchtung sehr dankbar...
__________________ Samsung Galaxy S mit Android 4.03 RC4 ICSSGS Acer Iconia A100 mit Android 3.2 Vodafone 858 smart mit Android 2.2.1 Geändert von mradlmaier (11.02.2012 um 18:04 Uhr) |
| | |
| | #6 (permalink) | |
| Android-Hilfe.de Mitglied Modell: Acer Iconia A100 Registriert seit: 28.10.2011
Beiträge: 127
Abgegebene Danke: 15
Erhielt 13 Danke für 11 Beiträge
| Zitat:
__________________ Samsung Galaxy S mit Android 4.03 RC4 ICSSGS Acer Iconia A100 mit Android 3.2 Vodafone 858 smart mit Android 2.2.1 | |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Tastaturlupe / Cursor? | tomi.omni | Android Ice Cream Sandwich | 4 | 27.12.2011 19:09 |
| Fehler in DB Cursor? | Tom299 | Android App Entwicklung | 0 | 24.11.2011 09:48 |
| Cursor-Tasten | naturelle | Motorola Xoom Forum | 3 | 31.08.2011 16:49 |
| Cursor bewegen | androididi | LG P500 Optimus One Forum | 3 | 15.11.2010 20:58 |
| Cursor schließen? | so.r.u | Android App Entwicklung | 5 | 06.04.2010 18:41 |