我在一个片段中有超过5个API调用。这样做,应用程序的性能加载会变慢。
所以我计划让它与kotlin并行运行。如何在我的代码中使用执行器和线程。
我实现了如下格式的api。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
viewModel.callApiOne()
viewModel.callApiTwo()
viewModel.callApiThree()
viewModel.getResponseInViewModel().observe(this.viewLifecycleOwner, Observer {
if (it.errorResponse?.code() == 200) {
}
})
}
ViewModel.kt
fun callApiOne() {
repository.callApiOne()
}
fun getResponseInViewModel(): MutableLiveData<Resource<Model>> {
respp = repository.getResponse()
return respp
}
Repository.kt
private val resp by lazy { MutableLiveData<Resource<Model>>() }
fun callApiOne() {
val api = AppMain.restClient?.services?.callApiOne()
api?.enqueue(object : Callback<Model> {
override fun onFailure(call: Call<Model>, t: Throwable) {
resp.postValue(Resource.failure(t.message!!, null))
}
override fun onResponse(
call: Call<Model>,
response: Response<Model>
) {
if (response.isSuccessful) {
resp.postValue(Resource.successResp(response))
} else {
resp.postValue(Resource.errorresponse(response))
}
}
})
}
fun getResponse(): MutableLiveData<Resource<Model>> = resp
在这种情况下应该使用协程。
的例子:
MyFragment : Fragment(), CoroutineScope by MainScope() {
...
private fun init() {
launch { // starts a coroutine on main thread
viewModel.fooSuspend()
}
}
}
MyViewModel : ViewModel() {
...
suspend fun fooSuspend() {
withContext(Dispatchers.IO) { //do on IO Thread
doIOHaveOperation()
}
}
}