一个需要后台长时间运行的程序,运行到一定时间总是出现以下异常: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=1 (# cursors opened by this proc=733) 从错误提示上来看,应该是内存泄漏造成Cursor window分配失败。 根据Google搜索的结果,网上的说法都是Cursor未关闭造成。但是关闭不再使用的Cursor是基本知识,程序中并不存在该问题,而且也不存在同一时间同时打开多个Cursor的问题。 既然不是数据库操作本身的问题,我开始怀疑是其他模块存在内存泄漏,影响到了Cursor window的分配。后来经过排查,发现问题出在对Looper的使用上,程序中在多个线程中使用了Looper,但是并没有quit。 对Looper的使用进行修改后,该异常不再出现。 |
|