小编dev*_*evz的帖子

Kotlin Flow:如何取消订阅/停止

更新协程 1.3.0-RC

工作版本:

@FlowPreview
suspend fun streamTest(): Flow<String> = channelFlow {
    listener.onSomeResult { result ->
        if (!isClosedForSend) {
            offer(result)
        }
    }

    awaitClose {
        listener.unsubscribe()
    }
}
Run Code Online (Sandbox Code Playgroud)

另请查看 Roman Elizarov 的这篇 Medium 文章:回调和 Kotlin 流程

原始问题

我有一个流发出多个字符串:

@FlowPreview
suspend fun streamTest(): Flow<String> = flowViaChannel { channel ->
    listener.onSomeResult { result ->
            if (!channel.isClosedForSend) {
                channel.sendBlocking(result)
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

一段时间后,我想取消订阅流。目前我执行以下操作:

viewModelScope.launch {
    beaconService.streamTest().collect {
        Timber.i("stream value $it")
        if(it == "someString")
            // Here the coroutine gets canceled, but streamTest is still executed …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-coroutines

20
推荐指数
6
解决办法
1万
查看次数

我可以作为设备所有者更改设置吗?(安卓4工作)

如果应用程序注册为设备所有者,则可以更改多种设置(蓝牙、卸载阻止等)。但是,与普通应用程序一样,无法更改全局设置(飞行模式、开发人员模式等)。

可以更改的设置:

作为设备所有者,有办法更改全局设置吗?或者我可以在设备设置过程中进行设置吗?

android android-settings

5
推荐指数
0
解决办法
452
查看次数