Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
356 views
in Technique[技术] by (71.8m points)

java - android.database.CursorWindowAllocationException when moving a Cursor

I'am using an SQLite database and I regularly get runtime errors I can't find the origin of. After a query, I use moveToFirst to point on the first record retrieved and this sometimes triggers an android.database.CursorWindowAllocationException exception. Added to this exception is the following sentence : "Cursor window allocation of 2048kb failed.# open Cursors=736 (#cursors opendby this proc=736)".

In the Android documentation, I haven't found anything related to this exception yet. Does anyone know it's cause and a way to avoid it?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This error is nearly always due to not closing a cursor when it's finished with. Every time you open a cursor, memory is required to map the data that cursor represents and that memory cannot be released until the cursor is closed. There is a limit to the amount of memory available for this purpose so if cursors are not closed and an application continues to open new ones, this error is likely to occur at some point.

I recommend you examine your code to make sure that all cursors created are being closed at some point. Also take care with any code that opens a cursor within a loop - your error message says 'open Cursors=736' which suggests a lot of cursor activity within a loop of some sort.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...