我們已經看到了大量SQLiteDiskIOException
錯誤在我們的Android應用程序,與堆棧跟蹤類似以下內容:SQLiteDiskIOException Android中
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)
這家新近開始發生在幾個星期前,但沒有顯著數據庫更改了發佈此問題報告的確切發佈。儘管擁有(我相信)適當的索引,但是在查詢完成後,這種例外情況已被報告超過我們對cursor.moveToFirst()
調用的滿意度,這一點您可以從堆棧跟蹤中看到。到目前爲止,我們已經完全無法重現。
該查詢有點複雜,有三個左連接。下面是一個有代表性的查詢,爲了保護無辜者,更改了一些標識列。
select distinct c._id as _id,c.type as type,c.name as name,c.slug as slug,c.description as description,c.extra1 as extra1,c.extra2 as extra2,c.extra3 as extra3,c.extra4 as extra4,c.extra5,c.extra6 as extra6,c.extra7 as extra7,c.extra8 as extra8, c.extra9 as extra9,c.sslug as sslug,
c2.name as sname,
p.type as prel,
em.dS as dS,em.eS as eS
from cse as c
left join cse as c2 on c.sslug=c2.slug
left join emed as em on c.slug=em.slug
left join pre as p on c.sslug=p.slug
where c.pslug='slug' AND c.user='user' AND c.csource='csource'
order by c.type asc, c.extra6 desc, c.sortorder asc
其他來源建議我們試圖提取太多的數據,但事實並非如此。我們能夠獲得完整數據庫行數的三個用戶案例顯示: cse含有< 2000條目, 含有< 150條目,而 含有0或7個條目。 此外,在查詢中解釋查詢計劃表明所有連接都是針對索引列完成的。
在每種情況下,我們都看到了這種情況,用戶在各種設備(DROID,Hero,EVO,可能還有其他設備)上運行Android 2.1。值得注意的是,我們還沒有在我們的G1設備上看到過這一點,即使它們裝載了其他應用程序。
最後,卸載和重新安裝已成功清除問題,但可能只是暫時性的。
我擔心這個問題是Android 2.1中數據損壞的結果。 有沒有人有可能的建議,看看什麼? 這可能與this Android bug on SQLiteDatabaseCorruptException
指導和解決方案非常感謝。
你可以製作一個重現此問題的小應用程序嗎? 如果是這樣,我會將其上傳到http://code.google。com/p/android/issues/list – Macarse 2010-07-11 01:51:10
我一直試圖通過我們的應用程序重現一段時間的問題。我還沒有嘗試過一個小程序,特別是2.1。如果最新的更改無法解決問題,那麼這可能是下一個路徑。謝謝。 – 2010-07-11 23:15:45
我想象一下,人們買了骯髒的SD卡,遭受腐敗。 – 2010-11-08 18:13:18