Skip to content

API 呼び出しが Main Thread になってるかも #79

@kokoichi206

Description

@kokoichi206

ちょっと調べた感じ、以下のブロックは Main Thread で実行されてまってそう。。。

getMembersUseCase("").onEach { result ->
    when (result) {
        ...
    }
}.launchIn(viewModelScope)

// getMembersUseCase() のなかみ
class GetMembersUseCase @Inject constructor(
    private val repository: SakamichiRepository
) {
    // ここで Members -> List<Member> に変えている
    operator fun invoke(groupName: String): Flow<Resource<List<Member>>> = flow {
        try {
            emit(Resource.Loading<List<Member>>())
            val members = repository.getMembers(groupName).members.map { it.toMember() }
            emit(Resource.Success<List<Member>>(members))
        } catch (e: HttpException) {
            emit(Resource.Error<List<Member>>(e.localizedMessage ?: "An unexpected error occurred."))
        } catch (e: IOException) {
            emit(Resource.Error<List<Member>>("Couldn't reach server. Check your network connection"))
        }
    }
}

ログに出してみた結果、main って出てるけど本当?
(main だと通信できない気がしたり。。。)

2022-12-12 12:04:28.796 15141-15141 hoge                    jp.mydns.kokoichi0206.sakamichiapp   D  GetMembersUseCase: Thread[main,5,main]
2022-12-12 12:04:28.796 15141-15141 hoge                    jp.mydns.kokoichi0206.sakamichiapp   D  MembersRepositoryImpl: Thread[main,5,main]
2022-12-12 12:04:29.050 15141-15141 hoge                    jp.mydns.kokoichi0206.sakamichiapp   D  MemberListViewModel: Thread[main,5,main]

この辺を参考にして、ベストプラクティスに従っていく。

https://developer.android.com/kotlin/coroutines/coroutines-adv?hl=ja#perf

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions