2010-09-29 61 views
1

電子郵件數據庫(有超過1000封郵件)被廣泛使用後,電子郵件應用程序崩潰。如果我再次回到App,所有郵件都會自動開始刪除。當超過最大緩存大小時想知道數據庫行爲

得到的錯誤日誌如下:

E/AndroidRuntime( 417): java.lang.OutOfMemoryError 
E/AndroidRuntime( 417): at java.lang.String.<init>(String.java:468) 
E/AndroidRuntime( 417): at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:659) 
E/AndroidRuntime( 417): at java.lang.StringBuilder.toString(StringBuilder.java:664) 
E/AndroidRuntime( 417): at com.android.email.mail.transport.DiscourseLogger.addReceivingLineToBuffer(DiscourseLogger.java:57) 
E/AndroidRuntime( 417): at com.android.email.mail.transport.DiscourseLogger.addReceivedByte(DiscourseLogger.java:70) 
E/AndroidRuntime( 417): at com.android.email.mail.store.ImapResponseParser.readByte(ImapResponseParser.java:71) 
E/AndroidRuntime( 417): at com.android.email.mail.store.ImapResponseParser.expect(ImapResponseParser.java:332) 
E/AndroidRuntime( 417): at com.android.email.mail.store.ImapResponseParser.parseToken(ImapResponseParser.java:199) 
E/AndroidRuntime( 417): at com.android.email.mail.store.ImapResponseParser.readToken(ImapResponseParser.java:165) 
E/AndroidRuntime( 417): at com.android.email.mail.store.ImapResponseParser.readTokens(ImapResponseParser.java:141) 
E/AndroidRuntime( 417): at com.android.email.mail.store.ImapResponseParser.readResponse(ImapResponseParser.java:92) 
E/AndroidRuntime( 417): at com.android.email.mail.store.ImapStore$ImapConnection.readResponse(ImapStore.java:1491) 
E/AndroidRuntime( 417): at com.android.email.mail.store.ImapStore$ImapFolder.fetchInternal(ImapStore.java:887) 
E/AndroidRuntime( 417): at com.android.email.mail.store.ImapStore$ImapFolder.fetch(ImapStore.java:810) 
E/AndroidRuntime( 417): at com.android.email.MessagingController.synchronizeMailboxGeneric(MessagingController.java:898) 
E/AndroidRuntime( 417): at com.android.email.MessagingController.synchronizeMailboxSynchronous(MessagingController.java:396) 
E/AndroidRuntime( 417): at com.android.email.MessagingController.access$2(MessagingController.java:384) 
E/AndroidRuntime( 417): at com.android.email.MessagingController$2.run(MessagingController.java:372) 
E/AndroidRuntime( 417): at com.android.email.MessagingController.run(MessagingController.java:171) 
E/AndroidRuntime( 417): at java.lang.Thread.run(Thread.java:1096) 

W /數據庫(497):達到MAX大小編譯-SQL語句緩存數據庫/data/data/com.android.email/數據庫/ EmailProvider.db;即高速緩存中的這個sql語句的NO空間:SELECT _id FROM附件WHERE messageKey = 996。請改變你的sql語句使用'?'爲bindargs,而不是使用實際值

我想知道什麼是我得到上述錯誤的行爲。

我的意思是如果超過最大緩存大小,android會做什麼?如果你可以知道實現的目的是什麼,那將會非常有幫助。

回答

0

您可以使用setMaximumSize設置最大DB大小。

您可以使用getMaximumSiz來檢查數據庫大小,如果這與您之前修復的數據庫大小差不多。

然後將您的本地數據庫複製(複製)到SD卡上的數據庫並使用releaseMemory釋放內存。

0

這是另一個問題。這條消息說明了這一切: 「針對數據庫的已編譯sql語句高速緩存已達到最大大小」

基本上,emaill應用程序在查詢中使用硬編碼值。相反,它應該使用預準備語句來緩存只准備好的語句。

希望它有幫助。