Jesteśmy coraz dużej liczby SQLiteDiskIOException
błędów w naszej aplikacji Android, stos ślady podobne do następujących:SQLiteDiskIOException w Androidzie
E/AndroidRuntime(2252): Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error
E/AndroidRuntime(2252): at android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
E/AndroidRuntime(2252): at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:75)
E/AndroidRuntime(2252): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:288)
E/AndroidRuntime(2252): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:269)
E/AndroidRuntime(2252): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
E/AndroidRuntime(2252): at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
E/AndroidRuntime(2252): at com.company.android.CActivity$QueryTask.doInBackground(CActivity.java:1660)
Ten niedawno począwszy dzieje się kilka tygodni temu, ale żadne znaczące zmiany w bazie danych trwało miejsce w dokładnym wydaniu, w którym rozpoczęło się zgłaszanie tego problemu. Pomimo posiadania (moim zdaniem) odpowiednich indeksów, ten wyjątek został zgłoszony bardziej niż jesteśmy zadowoleni z wywołań cursor.moveToFirst()
po zakończeniu zapytania, co widać na podstawie śledzenia stosu. Do tej pory nie byliśmy w stanie się rozmnażać.
Zapytanie jest nieco skomplikowane, z trzema lewymi złączeniami. Poniżej znajduje się reprezentatywne zapytanie, a niektóre kolumny identyfikacyjne zostały zmienione w celu ochrony niewinnych.
Inne źródła sugerują, że próbujemy wyciągnąć zbyt dużo danych, ale tak się nie dzieje. Trzy przypadki użytkowników, w których udało nam się uzyskać pełne liczby wierszy bazy danych, pokazują: cse z < 2000 wpisów, emed z < 150 wpisów i pre z 0 lub 7 wpisami. Ponadto "wyjaśnij plan zapytania" w zapytaniu oznacza, że wszystkie połączenia są wykonywane względem indeksowanych kolumn.
W każdym przypadku, w którym to widzieliśmy, użytkownik korzystał z systemu Android 2.1 na różnych urządzeniach (DROID, Hero, EVO, ewentualnie innych). Warto zauważyć, że nie widzieliśmy tego na kilku urządzeniach G1, jakie mamy, nawet gdy są one obciążone innymi aplikacjami.
Wreszcie, odinstalowanie i ponowne zainstalowanie okazało się skuteczne w usunięciu problemu, choć możliwe, że tylko tymczasowo.
Obawiam się, że ten problem jest wynikiem uszkodzenia danych w systemie Android 2.1. Czy ktoś ma możliwe sugestie, na co zwrócić uwagę? Może to być powiązane z
Wskazówki i rozwiązania są bardzo cenne.
Czy możesz zrobić małą aplikację, która odtwarza problem? Jeśli tak, prześlemy go na http://code.google.com/p/android/issues/list – Macarse
Od jakiegoś czasu próbuję odtworzyć ten problem za pośrednictwem naszej aplikacji. Nie próbowałem małego programu, szczególnie w wersji 2.1. To może być kolejna ścieżka, jeśli najnowsze zmiany nie rozwiązują problemu. Dzięki. –
Wyobrażam sobie, że ludzie kupowali nieczyste karty SD, które cierpią z powodu korupcji. –