SyncSession 类
- java.lang.Object
-
- io.realm.mongodb.sync.SyncSession
-
public class SyncSession extends Object
会话控制如何在设备上的单个 Realm 与 Realm 对象服务器上的服务器 Realm 之间同步数据。会话是通过使用
SyncConfiguration
打开 Realm 实例来创建的。 创建会话后,它将继续存在,直到应用程序关闭或使用此SyncConfiguration
的所有线程关闭各自的Realm
。会话由 Realm 控制,但可以在出现错误时提供附加信息。 这些错误在
SyncSession.ErrorHandler
中传递。创建会话时,Realm 将建立与服务器的连接。 此连接由 Realm 控制,可能在多个会话之间共享。 可以使用
addConnectionChangeListener(ConnectionListener)
和isConnected()
获取连接的见解。会话本身具有与底层连接不同的生命周期。 可以使用
getState()
查找会话状态。SyncSession
对象是线程安全的。
-
-
嵌套类摘要
嵌套类 修饰符和类型 类 说明 static interface
SyncSession.ClientResetHandler
已弃用。static interface
SyncSession.ErrorHandler
用于报告任何会话错误的接口。static class
SyncSession.State
描述 SyncSession 可能处于的状态的枚举。
-
方法摘要
所有方法 实例方法 具体方法 修饰符和类型 方法 说明 void
addConnectionChangeListener(ConnectionListener listener)
添加监听器,跟踪支持此会话的连接的更改。void
addDownloadProgressListener(ProgressMode mode, ProgressListener listener)
添加进度监听器,用于跟踪需要从 Realm 对象服务器下载的变更。void
addUploadProgressListener(ProgressMode mode, ProgressListener listener)
添加进度监听器,用于跟踪需要从设备上传到 Realm 对象服务器的变更。void
downloadAllServerChanges()
调用此方法将阻塞,直到所有已知的远程更改都已下载并应用到 Realm。boolean
downloadAllServerChanges(long timeout, TimeUnit unit)
调用此方法将阻塞,直到所有已知的远程更改都已下载并应用于 Realm 或达到指定的超时时间。SyncConfiguration
getConfiguration()
返回负责控制会话的SyncConfiguration
。ConnectionState
getConnectionState()
获取会话所使用连接的当前状态,如ConnectionState
中所定义。URI
getServerUrl()
返回描述此会话连接到并同步更改的远程 Realm 的URI
。SyncSession.State
getState()
获取当前会话的状态,如SyncSession.State
中所定义。User
getUser()
User
SyncConfiguration
返回用于连接到 MongoDB Realm 的 。boolean
isConnected()
检查会话是否已连接到服务器以及是否可以同步数据。void
removeConnectionChangeListener(ConnectionListener listener)
删除之前注册的ConnectionListener
。void
removeProgressListener(ProgressListener listener)
删除进度侦听器。void
start()
尝试启动会话并启用与 Realm 对象服务器的同步。void
stop()
停止与 Realm 对象服务器的任何同步,直到完全关闭 Realm 后再次重新打开 Realm。void
uploadAllLocalChanges()
调用此方法将被阻止,直到所有已知的本地更改都已上传到服务器。boolean
uploadAllLocalChanges(long timeout, TimeUnit unit)
调用此方法将被阻止,直到所有已知的本地更改都已上传到服务器或达到指定的超时时间。
-
-
-
方法详细信息
-
getConfiguration
public SyncConfiguration getConfiguration()
返回负责控制会话的SyncConfiguration
。- 返回:
- 定义和控制此会话的 SyncConfiguration。
-
getUser
public User getUser()
User
SyncConfiguration
返回用于连接到 MongoDB Realm 的 。- 返回:
User
用于对 MongoDB Realm 上的会话进行身份验证。
-
getState
public SyncSession.State getState()
获取当前会话的状态,如SyncSession.State
中所定义。请注意,此方法返回后,状态可能会发生变化。
- 返回:
- 会话的状态。
- 另请参阅:
SyncSession.State
-
getConnectionState
public ConnectionState getConnectionState()
获取会话所使用连接的当前状态,如ConnectionState
中所定义。- 返回:
- 会话使用的连接状态。
- 另请参阅:
ConnectionState
-
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
-
removeConnectionChangeListener
public void removeConnectionChangeListener(ConnectionListener listener)
删除之前注册的ConnectionListener
。- 参数:
listener
- 要删除的侦听器- 抛出异常:
IllegalArgumentException
- 如果侦听器为null
。
-
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
小于或等于0
或unit
为null
。
-
uploadAllLocalChanges
public void uploadAllLocalChanges() throws InterruptedException
调用此方法将被阻止,直到所有已知的本地更改都已上传到服务器。 这将涉及网络访问,因此只能从非用户界面线程调用此方法。如果设备处于离线状态,此方法可能永远不会返回。
在打开 Realm 之前无法调用此方法。
- 抛出异常:
IllegalStateException
- 如果在 Android 主线程上调用。InterruptedException
- 如果线程在下载过程中被中断。
-
uploadAllLocalChanges
公共布尔uploadAllLocalChanges(长超时, TimeUnit单位)抛出InterruptedException
调用此方法将被阻止,直到所有已知的本地更改都已上传到服务器或达到指定的超时时间。 这将涉及网络访问,因此只能从非用户界面线程调用此方法。在打开 Realm 之前无法调用此方法。
- 返回:
true
如果数据是在超时之前上传的。false
如果操作超时或以其他方式失败)。- 抛出异常:
IllegalStateException
- 如果在 Android 主线程上调用。InterruptedException
- 如果上传花费的时间超过指定的超时时间,或者线程在上传过程中被中断。 即使引发此异常,上传也会在背景继续进行。IllegalArgumentException
- 如果timeout
小于或等于0
或unit
为null
。
-
开始
public void start()
尝试启动会话并启用与 Realm 对象服务器的同步。打开 Realm 实例时,此操作会自动发生,因此仅当使用
stop()
停止会话时才需要手动执行此操作。如果会话已启动,则调用此方法不会执行任何操作。
如果
getState()
返回SyncSession.State.ACTIVE
,则认为会话已启动。 如果会话为SyncSession.State.DYING
,则会话将移回SyncSession.State.ACTIVE
。- 另请参阅:
getState()
,stop()
-
请停止
public void stop()
停止与 Realm 对象服务器的任何同步,直到完全关闭 Realm 后再次重新打开 Realm。可以通过再次调用
start()
来重新启用同步。如果会话已停止,则调用此方法不会执行任何操作。
-
-