Android rxJava 2完成任务后如何取消订阅
我有从我的房间数据库中删除所有用户的代码。为此,我使用的是rxjava2。问题是,我订阅接收所有用户,毕竟删除了所有用户,但我不知道如何取消订阅,不再接收有关用户的信息Android rxJava 2完成任务后如何取消订阅,android,database,kotlin,android-room,rx-java2,Android,Database,Kotlin,Android Room,Rx Java2,我有从我的房间数据库中删除所有用户的代码。为此,我使用的是rxjava2。问题是,我订阅接收所有用户,毕竟删除了所有用户,但我不知道如何取消订阅,不再接收有关用户的信息 fun deleteUser(user: User) { Completable.fromAction { appRepository.deleteUser(user); appRepository.deleteByUser(user.userName) objective
fun deleteUser(user: User) {
Completable.fromAction {
appRepository.deleteUser(user);
appRepository.deleteByUser(user.userName)
objectiveActionManager.saveObjective(null)
profileActionManager.saveProfile(null)
}.subscribeOn(io()).subscribe()
}
fun deleteAllUsers() {
getAllUsers().subscribeOn(io()).subscribe { users ->
users.forEach { deleteUser(it) }
}
}
fun getAllUsers(): Observable<List<User>> {
return appRepository.getAllUsers()
.observeOn(AndroidSchedulers.mainThread())
}
fun deleteUser(用户:用户){
可完成的动作{
appRepository.deleteUser(用户);
appRepository.deleteByUser(user.userName)
objectiveActionManager.saveObjective(空)
profileActionManager.saveProfile(空)
}.subscribeOn(io()).subscribe()
}
乐趣{
getAllUsers().subscribeOn(io()).subscribe{users->
users.forEach{deleteUser(it)}
}
}
fun getAllUsers():可观察{
return appRepository.getAllUsers()返回
.observeOn(AndroidSchedulers.mainThread())
}
您可以从订阅中分配一个一次性
:
val disposable: Disposable = getAllUsers().subscribeOn(io()).subscribe { users ->
users.forEach { deleteUser(it) }
}
当您不想再收到任何更新或类的生命周期结束时,请执行以下操作:
disposable.dispose()
不要在这些方法中订阅,让调用方处理订阅。关键是这种支持与生命周期无关。我只需要获取所有用户,删除他们并调用disposable.dispose(),但我不知道如何确定在什么时候调用disposable.dispose()@destructor,这一点现在很困难,因为您的存储库返回一个可观察的,它可能会无休止地返回用户列表。如果它返回了一个单一的,你甚至不必在意,只需获取用户并删除他们。如果你不能改变这一点,我会在第一次发布用户后取消脚本,这是在subscribe子句中删除用户的地方。