
可以看到,单表批量写入82208条数据。
ContentProvider写入后,app造成了jvm的大量gc,并且阻塞了UI线程。
解决办法
1.使用事务
重载实现contentProvider $ applyBatch() 时,使用事务
事务可以将多次的写入集合到一次事务当中。提高效率

2.延迟或不发送数据更新(ContentResolver.notifyChange)
applyBatch内部也时循环调用insert方法,加入insert中写有contentResolver.notifyChange逻辑时,将会造成大量的内存消耗。
方法:
1.只通知频率不高且无关业务的表更新
2.insert中加入是否正在批量插入标志符判断,当applybatch执行到最后时(期间记录数据uri),之后才执行通知
网友评论