Android如何监测DB的cursor没关

今天程序在跑MonkeyTest的时候发生异常

android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=311 (# cursors opened by this proc=311)

从日志可以看出来程序有误有311个cursor使用后没有关闭导致内阻不足引发的crash
然后在程序入口加入了代码

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                    .detectLeakedSqlLiteObjects()
                    .detectLeakedClosableObjects()
                    .penaltyLog()
                    .penaltyDeath()
                    .build());

它会检测继承了closeable和数据库引用对象,如果对象失去引用未关闭则会抛出crash
这样可以轻松定位未关闭cursor的地方

    原文作者:碎念枫子
    原文地址: https://www.jianshu.com/p/5c44e01062f3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞