Realm多线程中的那些坑...
2016-04-01 23:55
204 查看
个人在开发中遇到的一些小坑... 可能会持续更新...
1.RealmObject自带线程保护功能,只能在创建它的线程中访问,在子线程中不能访问。
也就是说,如果你在主线程中new了一个RealmObject对象 user,那么在子线程中是访问不了user对象的。
要想在子线程中访问,必须先将user存入Ream中,然后在子线程中query出来。
2.如果Realm关闭,所有查询得到的RealmObject都不能使用了。
如果想在子线程中去查询数据,然后在主线程中使用是无法做到的。所以Realm提供的异步查询就很重要了...
3.如果想在Realm.close()之后继续操作查询得到的对象,只能复制一份数据传出来。
为防止Realm忘记关闭,个人喜欢将Realm的开启和关闭封装在一个函数中,想这样
注意,上面的代码是错误的!!!!查出来的user根本不能做任何操作!!!!
realm Colse掉之后,user对象就不能访问了,所以只能复制一份数据传出来。
这个比较坑,Realm开发者是为了它的一个特色功能Auto-Update,即自动更新查询到的数据,
特意让查询得到的数据与数据库中的数据保持了同步,所以Realm一关,外面的数据也用不了。
而且,这个Auto-update暂时还无法关闭,stackOverFlow上有说以后可能会提供关闭这个功能的方法。
如果你的RealmObject非常复杂,要copy一份数据将会很麻烦...
而且这还不是最坑的,最坑的是下面这条。
4.如果直接修改或删除query得到的数据,必须在transaction中完成...
也就是说,你根本不能把query返回的对象,当成普通对象去赋值或删除,如果想要直接操作...ok,把对象copy一份传出来...
暂时就这些吧。
1.RealmObject自带线程保护功能,只能在创建它的线程中访问,在子线程中不能访问。
也就是说,如果你在主线程中new了一个RealmObject对象 user,那么在子线程中是访问不了user对象的。
要想在子线程中访问,必须先将user存入Ream中,然后在子线程中query出来。
2.如果Realm关闭,所有查询得到的RealmObject都不能使用了。
如果想在子线程中去查询数据,然后在主线程中使用是无法做到的。所以Realm提供的异步查询就很重要了...
3.如果想在Realm.close()之后继续操作查询得到的对象,只能复制一份数据传出来。
为防止Realm忘记关闭,个人喜欢将Realm的开启和关闭封装在一个函数中,想这样
public User getRealmObject(String code){ Realm realm = Realm.getDefaultInstance(); User user = realm.where(User.class) .equalTo("code" code) .findFirst(); realm.close(); return user; }
注意,上面的代码是错误的!!!!查出来的user根本不能做任何操作!!!!
realm Colse掉之后,user对象就不能访问了,所以只能复制一份数据传出来。
这个比较坑,Realm开发者是为了它的一个特色功能Auto-Update,即自动更新查询到的数据,
特意让查询得到的数据与数据库中的数据保持了同步,所以Realm一关,外面的数据也用不了。
而且,这个Auto-update暂时还无法关闭,stackOverFlow上有说以后可能会提供关闭这个功能的方法。
如果你的RealmObject非常复杂,要copy一份数据将会很麻烦...
而且这还不是最坑的,最坑的是下面这条。
4.如果直接修改或删除query得到的数据,必须在transaction中完成...
也就是说,你根本不能把query返回的对象,当成普通对象去赋值或删除,如果想要直接操作...ok,把对象copy一份传出来...
暂时就这些吧。
相关文章推荐
- 人脸识别总结
- 为什么memset(szBuf, 0, sizeof(szBuf));会莫名其妙core dump?
- Https加密及攻防
- [Android Studio / NDK] 如何使用javah生成.h文件
- 合并顺序表
- deepin使用向日葵远程控制(修改run.sh)
- 新浪云服务上线项目
- 循环队列 输出杨辉三角
- 二阶魔方
- sikulix图片自动化测试,与robotframework整合介绍
- JAVA类库/JAVA API
- Discuz论坛上出现报错
- ZK部署
- POJ 2253 Dijstra 最短路变形
- sass入门(一)
- Java读写txt或doc文件
- Atitit.获得向上向下左的右的邻居的方法 软键盘的设计..
- 理解C语言中指针的声明以及复杂声明的语法
- Atitit.获得向上向下左的右的邻居的方法 软键盘的设计..
- Atitit.获得向上向下左的右的邻居的方法 软键盘的设计..