Realm Android:isValid(),isLoaded(),isManaged()是什么意思?

时间:2018-05-10 04:26:19

标签: android realm

{ "payment_methods": [ { "payment_method_id": "5f384f7d-8323-4207-a297-51c571234a8c", "type": "baidu_wallet", "description": "***53", }, { "payment_method_id": "f33847de-8113-4587-c307-51c2d13a823c", "type": "alipay", "description": "ga***@uber.com", }, { "payment_method_id": "f43847de-8113-4587-c307-51c2d13a823c", "type": "visa", "description": "***23" }, { "payment_method_id": "517a6c29-3a2b-45cb-94a3-35d679909a71", "type": "american_express", "description": "***05" }, { "payment_method_id": "f53847de-8113-4587-c307-51c2d13a823c", "type": "business_account", "description": "Late Night Ride" } ], "last_used": "f53847de-8113-4587-c307-51c2d13a823c" } 中,有三种方法RealmisValid()isLoaded()。 我想知道何时应该使用哪种方法?

2 个答案:

答案 0 :(得分:3)

FROM DOCS

  
      
  1. isValid()
  2.   
  • 检查RealmObject是否仍然有效,即RealmObject尚未删除,Realm是否已关闭。对于非托管对象,它将始终返回true。

  • 请注意,这可用于检查某些条件的有效性,例如在观察时为空。

    示例:

    // With RealmObject
    yourRealmObject.isValid();
    
  
      
  1. isLoaded()
  2.   
  • 检查用于查找此RealmObject的查询是否已完成。
  • 返回: 如果查询已完成,则为true;如果查询正在进行,则为false。
  

3。    isManaged()

  • 检查此对象是否由Realm管理。托管对象只是底层Realm文件中数据的包装。在Looper线程上,托管对象将进行实时更新,因此它始终指向最新数据。可以使用addChangeListener(RealmModel,RealmChangeListener)注册更改侦听器,以便在发生更改时得到通知。托管对象是线程限制的,因此无法从创建它们的其他线程访问它们。

  • 如果此方法返回false,则该对象不受管理。非托管对象只是一个普通的Java对象,因此可以跨线程自由解析,但对象中的数据没有连接到底层Realm,因此它不会实时更新。

答案 1 :(得分:3)

<强>的isValid

public final boolean isValid()

检查RealmObject是否仍然有效,即RealmObject尚未删除,Realm是否已关闭。对于非托管对象,它将始终返回true。

两件事使RealmObject失效:

- 关闭它所属的Realm实例    并删除任何线程上的对象(如果您正在进行自动更新)    looper thread)

<强> isLoaded

public final boolean isLoaded()

检查用于查找此RealmObject的查询是否已完成。 像RealmQuery.findFirstAsync()这样的异步方法返回一个表示RealmQuery未来结果的RealmObject。在这方面可以认为它类似于未来。

一旦isLoaded()返回true,即使查询没有找到与查询参数匹配的任何对象,该对象也会表示查询结果。在这种情况下,RealmObject将成为&#34; null&#34;对象

<强> isManaged

public static boolean isManaged(E object)

检查此对象是否由Realm管理。托管对象只是底层Realm文件中数据的包装。在Looper线程上,托管对象将进行实时更新,因此它始终指向最新数据。可以使用addChangeListener(RealmModel,RealmChangeListener)注册更改侦听器,以便在发生更改时得到通知。托管对象是线程限制的,因此无法从创建它们的其他线程访问它们。

Realm对象的实例可以是托管对象,也可以是非托管对象。 托管对象在Realm中持久存在,始终是最新的并且线程受限。它们通常比非托管版本更轻量级,因为它们在Java堆上占用的空间更少。 非托管对象就像普通的Java对象一样,它们不会被持久化,也不会自动更新。它们可以在线程之间自由移动。

更多信息请参阅:https://realm.io/docs/java/4.3.3/api/io/realm/RealmObject.html