SyncSession 类


  • public class SyncSession
    extends Object
    会话控制如何在设备上的单个 Realm 与 Realm 对象服务器上的服务器 Realm 之间同步数据。

    会话是通过使用SyncConfiguration打开 Realm 实例来创建的。 创建会话后,它将继续存在,直到应用程序关闭或使用此SyncConfiguration的所有线程关闭各自的Realm

    会话由 Realm 控制,但可以在出现错误时提供附加信息。 这些错误在SyncSession.ErrorHandler中传递。

    创建会话时,Realm 将建立与服务器的连接。 此连接由 Realm 控制,可能在多个会话之间共享。 可以使用addConnectionChangeListener(ConnectionListener)isConnected()获取连接的见解。

    会话本身具有与底层连接不同的生命周期。 可以使用getState()查找会话状态。

    SyncSession对象是线程安全的。

    • 方法详细信息

      • getConfiguration

        public SyncConfiguration getConfiguration()
        返回负责控制会话的SyncConfiguration
        返回:
        定义和控制此会话的 SyncConfiguration。
      • getUser

        public User getUser()
        UserSyncConfiguration返回用于连接到 MongoDB Realm 的 。
        返回:
        User 用于对 MongoDB Realm 上的会话进行身份验证。
      • getServerUrl

        公共URI getServerUrl()
        返回描述此会话连接到并同步更改的远程 Realm 的URI
        返回:
        URI 描述远程 Realm。
      • isConnected

        public boolean isConnected()
        检查会话是否已连接到服务器以及是否可以同步数据。 这是一种最佳猜测努力。 为了节省电量,底层实现使用心跳来检测连接是否仍然可用。 因此,如果没有主动同步数据,并且自上次心跳以来已经过去了一段时间,则连接可能已断开,但此方法仍将返回true
        返回:
        true 会话是否已连接并准备好同步数据,如果未连接或正在连接,则返回false
      • addDownloadProgressListener

        public void addDownloadProgressListener​(ProgressMode mode,
                                                ProgressListener listener)
        添加进度监听器,用于跟踪需要从 Realm 对象服务器下载的变更。

        ProgressListener将在注册时立即触发,并在注册后定期触发。

        参数:
        mode - 使用的模式类型。 有关更多信息,请参阅ProgressMode
        listener - 要注册的侦听器。
      • addUploadProgressListener

        public void addUploadProgressListener​(ProgressMode mode,
                                              ProgressListener listener)
        添加进度监听器,用于跟踪需要从设备上传到 Realm 对象服务器的变更。

        ProgressListener将在注册时立即触发,并在注册后定期触发。

        参数:
        mode - 使用的模式类型。 有关更多信息,请参阅ProgressMode
        listener - 要注册的侦听器。
      • removeProgressListener

        public void removeProgressListener​(ProgressListener listener)
        删除进度侦听器。 如果未注册侦听器,则此方法将不执行任何操作。
        参数:
        listener - 要删除的侦听器。
      • addConnectionChangeListener

        public void addConnectionChangeListener​(ConnectionListener listener)
        添加监听器,跟踪支持此会话的连接的更改。 有关更多详细信息,请参阅ConnectionState
        参数:
        listener - 要注册的侦听器。
        抛出异常:
        IllegalArgumentException - 如果侦听器为null
        另请参阅:
        ConnectionState
      • downloadAllServerChanges

        public void downloadAllServerChanges()
                                      throws InterruptedException
        调用此方法将阻塞,直到所有已知的远程更改都已下载并应用到 Realm。 这将涉及网络访问,因此只能从非用户界面线程调用此方法。

        如果设备处于离线状态,此方法可能永远不会返回。

        在会话启动之前无法调用此方法。

        抛出异常:
        IllegalStateException - 如果在 Android 主线程上调用。
        InterruptedException - 如果线程在下载过程中被中断。
      • downloadAllServerChanges

        public boolean downloadAllServerChanges​(long timeout, TimeUnitunit ) throws InterruptedException
        调用此方法将阻塞,直到所有已知的远程更改都已下载并应用于 Realm 或达到指定的超时时间。 这将涉及网络访问,因此只能从非用户界面线程调用此方法。

        在打开 Realm 之前无法调用此方法。

        返回:
        true 如果在超时之前下载了数据。 false如果操作超时或以其他方式失败)。
        抛出异常:
        IllegalStateException - 如果在 Android 主线程上调用。
        InterruptedException - 如果下载时间超过指定的超时时间,或者线程在下载过程中中断。 即使引发此异常,下载仍将在背景继续。
        IllegalArgumentException - 如果timeout小于或等于0unitnull
      • uploadAllLocalChanges

        public void uploadAllLocalChanges()
                                   throws InterruptedException
        调用此方法将被阻止,直到所有已知的本地更改都已上传到服务器。 这将涉及网络访问,因此只能从非用户界面线程调用此方法。

        如果设备处于离线状态,此方法可能永远不会返回。

        在打开 Realm 之前无法调用此方法。

        抛出异常:
        IllegalStateException - 如果在 Android 主线程上调用。
        InterruptedException - 如果线程在下载过程中被中断。
      • uploadAllLocalChanges

        公共布尔uploadAllLocalChanges(长超时, TimeUnit单位)抛出InterruptedException
        调用此方法将被阻止,直到所有已知的本地更改都已上传到服务器或达到指定的超时时间。 这将涉及网络访问,因此只能从非用户界面线程调用此方法。

        在打开 Realm 之前无法调用此方法。

        返回:
        true 如果数据是在超时之前上传的。 false如果操作超时或以其他方式失败)。
        抛出异常:
        IllegalStateException - 如果在 Android 主线程上调用。
        InterruptedException - 如果上传花费的时间超过指定的超时时间,或者线程在上传过程中被中断。 即使引发此异常,上传也会在背景继续进行。
        IllegalArgumentException - 如果timeout小于或等于0unitnull
      • 请停止

        public void stop()
        停止与 Realm 对象服务器的任何同步,直到完全关闭 Realm 后再次重新打开 Realm。

        可以通过再次调用start()来重新启用同步。

        如果会话已停止,则调用此方法不会执行任何操作。