2010-09-29 2 views
1

После обширного использования базы данных электронной почты (было более 1000 писем) приложение электронной почты разбилось. Если я снова вернусь в приложение, все письма начнут автоматически удаляться.Хотите знать поведение базы данных при превышении максимального размера кеша

журналов ошибок, полученных, как показано ниже:

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 в кеше: SELECT _id FROM Attachment WHERE messageKey = 996. Пожалуйста, измените свои SQL-заявления, чтобы использовать '?' для bindargs, вместо использования фактических значений

Я хочу знать, каково поведение, которое я получаю при вышеуказанной ошибке.

Я имею в виду, что будет делать андроид, если превышен максимальный размер кеша? Если бы вы могли сказать, где это будет реализовано, это будет очень полезно.

ответ

0

У вас есть способ установить максимальный размер DB с помощью setMaximumSize.

Вы можете проверить поток размера БД с помощью getMaximumSiz, и если это близко к размеру БД, который вы исправили ранее.

Затем скопируйте (скопируйте) свою локальную БД на БД на SD-карту и отпустите память с помощью releaseMemory.

0

это другой выпуск. В этом сообщении говорится все: «Достигнут размер MAX для кэша операторов скомпилированных-sql для базы данных»

В основном приложение emaill использует жестко заданные значения в запросах. Вместо этого он должен использовать подготовленные операторы, чтобы кэшировать только подготовленные заявления.

Надеюсь, это поможет.

Смежные вопросы