记录一次大量数据导致页面ANR的解决(Greendao,RxJava)

记录一次大量数据导致页面ANR的解决

问题开始

最开始测试的时候只有几十条数据,无所谓。到了昨天测得时候导入了2000条,这两千条要下拉搜索,也可以输入搜索。

界面差不多这样

2000个下拉
在主界面获取了这个下拉数据保存之后,再进入页面用Greendao取出去,甚至实时搜索。在滑动下拉的时候出现了数据不全,多输几次就卡死的情况。

解决办法

解决问题的时候,我在想,数据显示不全是什么原因。(找原因的过程很暴躁……)

因为数据库还没完成操作,界面就更新了!!!!!!!!!

数据库操作属于耗时操作,最开始我想过我自己弄一个AsynTask,然后弄俩接口也可以完成(保存操作最开始就是这样完成的)。

但是今早灵光一闪,这赤裸裸的响应式编程啊,为何不用RxJava?

再一搜,Greendao3.0竟然集成了RxJava!!!!!!

接下来的过程就很愉快了,直接上代码:

// 存数据
MyApplication.mDaoSession
.getInWarehouseDataDao()
 .rx()
 .insertInTx(resultBean.getResult().getData())   .observeOn(AndroidSchedulers.mainThread())
 .subscribe(new Action1<Iterable<InWarehouseData>>() {
	 @Override
	 public void call(Iterable<InWarehouseData> inWarehouseData) {
	 	mView.getComponentListByProjectSuc(projectID, type);
	 	mView.hideProgress();
	}
});
//搜索
 RxQuery<InWarehouseData> rxQuery=MyApplication
			.mDaoSession.getInWarehouseDataDao().queryBuilder()
			.where(InWarehouseDataDao.Properties.AssemblyNo.eq(twCode))
			.limit(100).rx();
	Observable<List<InWarehouseData>> observer=rxQuery.list();
	observer.observeOn(AndroidSchedulers.mainThread())//在主线程中调用
			.subscribe(new Action1<List<InWarehouseData>>() {
				@Override
				public void call(List<InWarehouseData> list) {
					//进行UI更新操作
					if (list.size() < 1) {
						mView.showFailToast("");
					} else {
						mView.searListSuc(list,twCode);
					}
				}
			});

是的,我限制了只显示100条,是个正常人都不会下拉2000个来选吧,而且还大多长得很像,所以对输入框输入进行监听即可。

仅以记录,若对其他人有用则太好了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值