[已解决]Could not allocate CursorWindow '' of size of size 2097152 due to error -12.

本文记录了一次Android应用由于网络请求过多导致内存溢出的问题,错误表现为'Could not allocate CursorWindow'。解决方案是减少网络请求数量以避免内存过度消耗。通过Android Studio的性能分析工具定位并解决了问题。

Could not allocate CursorWindow '/data/data/com.wbm.app.activity/databases/cashierDB.db' of size 2097152 due to error -12.


07-26 16:28:14.067 9407-9654/? W/System.err: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. 
07-26 16:28:14.067 9407-9654/? W/System.err:     at android.database.CursorWindow.<init>(CursorWindow.java:104)
07-26 16:28:14.067 9407-9654/? W/System.err:     at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
07-26 16:28:14.067 9407-9654/? W/System.err:     at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:139)
07-26 16:28:14.067 9407-9654/? W/System.err:     at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
07-26 16:28:14.067 9407-9654/? W/System.err:     at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:197)
07-26 16:28:14.067 9407-9654/? W/System.err:     at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237)
07-26 16:28:14.067 9407-9654/? W/System.err:     at org.litepal.crud.DataHandler.query(DataHandler.java:126)
07-26 16:28:14.067 9407-9654/? W/System.err:     at org.litepal.crud.QueryHandler.onFind(QueryHandler.java:154)
07-26 16:28:14.067 9407-9654/? W/System.err:     at org.litepal.crud.ClusterQuery.find(ClusterQuery.java:212)
07-26 16:28:14.067 9407-9654/? W/System.err:     at org.litepal.crud.ClusterQuery.find(ClusterQuery.java:188)
07-26 16:28:14.067 9407-9654/? W/System.err:     at com.wbm.app.business.service.RetailOrderService.findRetailOrderByTidOrOutId(RetailOrderService.java:471)
07-26 16:28:14.067 9407-9654/? W/System.err:     at com.wbm.app.business.schedule.ScheduleTaskSchedule.orderCreateSync2Cloud(ScheduleTaskSchedule.java:149)
07-26 16:28:14.067 9407-9654/? W/System.err:     at com.wbm.app.business.schedule.ScheduleTaskSchedule$8.run(ScheduleTaskSchedule.java:259)
07-26 16:28:14.067 9407-9654/? W/System.err:     at java.lang.Thread.run(Thread.java:841)
07-26 16:28:14.567 9407-9631/? E/CursorWindow: Could not allocate CursorWindow '/data/data/com.wbm.app.activity/databases/cashierDB.db' of size 2097152 due to error -12.
07-26 16:28:14.567 9407-9631/? W/System.err: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. 
07-26 16:28:14.567 9407-9631/? W/System.err:     at android.database.CursorWindow.<init>(CursorWindow.java:104)
07-26 16:28:14.567 9407-9631/? W/System.err:     at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
07-26 16:28:14.567 9407-9631/? W/System.err:     at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:139)
07-26 16:28:14.567 9407-9631/? W/System.err:     at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
07-26 16:28:14.567 9407-9631/? W/System.err:     at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:197)
07-26 16:28:14.567 9407-9631/? W/System.err:     at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237)
07-26 16:28:14.567 9407-9631/? W/System.err:     at org.litepal.crud.DataHandler.query(DataHandler.java:126)
07-26 16:28:14.567 9407-9631/? W/System.err:     at org.litepal.crud.QueryHandler.onFind(QueryHandler.java:154)
07-26 16:28:14.567 9407-9631/? W/System.err:     at org.litepal.crud.ClusterQuery.find(ClusterQuery.java:212)
07-26 16:28:14.567 9407-9631/? W/System.err:     at org.litepal.crud.ClusterQuery.find(ClusterQuery.java:188)
07-26 16:28:14.567 9407-9631/? W/System.err:     at com.wbm.app.business.service.AssociateReportService.findAssociateReportByAccount(AssociateReportService.java:161)
07-26 16:28:14.567 9407-9631/? W/System.err:     at com.wbm.app.business.service.AssociateReportService.currentCashierAdd(AssociateReportService.java:23)
07-26 16:28:14.567 9407-9631/? W/System.err:     at com.wbm.app.business.service.RetailOrderService$3.doInTransaction(RetailOrderService.java:298)
07-26 16:28:14.567 9407-9631/? W/System.err:     at com.wbm.app.business.transaction.CarriageTransactionTemplate.execute(CarriageTransactionTemplate.java:21)
07-26 16:28:14.567 9407-9631/? W/System.err:     at com.wbm.app.business.service.RetailOrderService.save(RetailOrderService.java:236)
07-26 16:28:14.567 9407-9631/? W/System.err:     at com.wbm.app.activity.SettlementActivity$17$3.run(SettlementActivity.java:751)
07-26 16:28:14.567 9407-9631/? W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-26 16:28:14.567 9407-9631/? W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-26 16:28:14.567 9407-9631/? W/System.err:     at java.lang.Thread.run(Thread.java:841)
07-26 16:28:14.577 9407-9631/? W/dalvikvm: threadid=23: thread exiting with uncaught exception (group=0x415612e8)
07-26 16:28:14.607 9407-9631/? E/AndroidRuntime: FATAL EXCEPTION: pool-5-thread-1
                                                 Process: com.wbm.app.activity, PID: 9407
                                                 org.litepal.exceptions.DataSupportException: Cursor window allocation of 2048 kb failed. 
                                                     at com.wbm.app.business.transaction.CarriageTransactionTemplate.execute(CarriageTransactionTemplate.java:26)
                                                     at com.wbm.app.business.service.RetailOrderService.save(RetailOrderService.java:236)
                                                     at com.wbm.app.activity.SettlementActivity$17$3.run(SettlementActivity.java:751)
                                                     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                     at java.lang.Thread.run(Thread.java:841)

原因分析:

经过上网查找资料以及自己的分析,这个是因为Out Of Memery,

而导致这个内存溢出的原因,我这里是因为我这里为了测试断网的状态下软件的情况,所以网络是断开的,这个时候,我的一部分代码会发送上千条的网络请求,

所以这个直接导致我的软件挂掉了,并且报了这个错误。

所以我这里的解决的办法就是减少网络请求的数量。


分析的过程:

主要是通过android studio 自带的工具

[置顶] 【Android】查看程序每个方法所花费的时间

点击我们要测试的app,然后点击上面的update Thread,然后看右边的那一栏就可以看到当前的线程了






评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值