首页 > 解决方案 > What happens if @WorkerThread annonated function calls another function in android?

问题描述

Which thread the subsequently called functions are executed?

You may consider a function like the getNewsFeed() function inside the repository class given below -

@Singleton
class NewsFeedRepository @Inject constructor(
    private val networkDataSource: NetworkDataSource,
    private val diskDataSource: DiskDataSource
) {

    @WorkerThread
    suspend fun getNewsFeed(): NewsResponse {
        return try {
            val news = networkDataSource.getNewsFeed()
            diskDataSource.updateCache(news)
            NewsResponse(news = news)

        } catch (ex: Exception) {

            NewsResponse(
                news = diskDataSource.getNews(),
                errorMessage = ex.message
            )

        }
    }
}

I called the getNewsFeed() function from ViewModel using kotlin coroutine as given below -

@HiltViewModel
class MainViewModel @Inject constructor(
    private val repository: NewsFeedRepository
) : ViewModel() {

    private val _newsResponse = MutableLiveData<NewsResponse>()
    val newsResponse: LiveData<NewsResponse>
        get() = _newsResponse

    init {
        viewModelScope.launch {
            _newsResponse.value = repository.getNewsFeed()
        }
    }

}

I tried to use Dispatchers.IO as well but I couldn't update livedata value hence I had to use @WorkerThread.

标签: androidmultithreadingkotlinkotlin-coroutinesworker-thread

解决方案


推荐阅读