在kotlin 的项目中学习一些使用的方法和实际的应用:
- suspend 到底怎么使用呢?
package im.zego.takeaguess.logic.sdk.interfaces
import android.app.Application
import im.zego.zim.entity.ZIMMessage
import kotlinx.coroutines.flow.FlowCollector
interface IZIMManager {
fun init(application: Application)
fun unInit()
suspend fun login(userId: String, userName: String, token: String): Result
fun logout()
suspend fun createRoom(roomId: String, roomName: String): Result
suspend fun joinRoom(roomId: String): Result
suspend fun logoutRoom(roomId: String): Result
suspend fun observeRoomMessage(collector: FlowCollector>)
}
答疑解惑
suspend函数的使用
主要是学习到一个async异步处理的深刻理解,这个关键词的中文意思是:悬挂。这让我直接就想到线程的挂起,要用的时候再释放资源。其实在kotlin中也是大同小异,不过使用的方法就比较特殊;和java就不太一样。
在实现了上述的接口Interface可以如下代码所示进行使用;
基本的逻辑就是一定要使用到关键词async进行异步处理。这可以节省资源和时间。
val loginZimRoomDef = async(Dispatchers.IO) {
zimManager.createRoom(
roomId = joinRoomResp.roomInfo.roomId,
roomName = joinRoomResp.roomInfo.name
)
} // 创建ZIM房间
val loginExpressRoomDef = async(Dispatchers.IO) {
expressManager.loginRoom(
roomId = joinRoomResp.roomInfo.roomId,
userId = AccountStore.userId,
userName = AccountStore.userName,
token = token
)
} // 进入Express房间
val initCopyrightedMusicDef = async(Dispatchers.IO) {
copyrightMusicManager.init(
userId = AccountStore.userId, userName = AccountStore.userName
)
上述代码可以同时实现多个初始化的方法。
更多的用法请参考Composing suspending functions -kotlin 官网



