android - 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.
解决方案
推荐阅读
- swift - Swift Package Manager:Target可以访问其他Target的依赖
- javascript - 数据对象的子对象在记录之前不会被评估。Vue.js
- c# - 无法识别的元素:'binaryMessageEncoding'
- javascript - 正则表达式:如何匹配不以特定字符串开头的数字
- python - 如何比较存储在python中两个列表中的字符串?
- java - Spring Boot 在tomcat中部署为ROOT,卡在部署中
- c# - 尝试循环回到控制台应用程序的开头
- javascript - wkhtmltopdf 标题中不必要的空格
- r - 从R中行中具有相同值(id)的数据框中获取平均值
- c# - C# 用带值的元组实例化字典