안녕하세요. 어느 덧 블로그 방문자 수 2000 명이 되었습니다.
지식을 짤막하게만이라고 아니면 저의 작은 경험을 공유하는 블로그인데
많은 분들이 읽어주시니 정말 더 잘써야 겠다는 생각이 드네요.
오늘은 Flow 에 대해서 이야기를 해보려고 합니다.
간단한 설명이나 정의는 다른 블로그들도 잘 설명되어 있어서 참고하시면 좋을 것 같습니다.
저는 일단 써보면서 활용하자는 측면으로 Splash Activity 로 설명을 해보겠습니다.
현재 안드로이드 12 에서 새로운 Splash 화면에 대한 API 도 나와있으니 참고하시면 좋을 것 같습니다.
https://developer.android.com/about/versions/12/features/splash-screen
저는 원래 Splash 화면을 Coroutine 을 사용해 딜레이를 주어서 사용했습니다. 코드는 아래와 같습니다.
private fun goNext() {
scope.launch {
delay(1500)
startActivity(Intent(this@SplashActivity, Main2Activity::class.java))
finish()
}
}
정말 가볍게 사용하는 방법인데요.
또한, ViewModel 를 사용하지 않고 액티비티 화면에서 바로 구현한 것이라 상당히 불편합니다. 😁😁
저는 이를 Flow 를 사용해서 분리를 해보았습니다.
사실 LiveData 를 사용해서 구현을 하더라도 그렇게 차이는 없습니다.
저는 위 코드를 아래와 같이 구현을 했습니다.
SplashActivity.kt
@AndroidEntryPoint
class SplashActivity : AppCompatActivity() {
private val binding by lazy { ActivitySplashBinding.inflate(layoutInflater) }
private val viewModel: SplashViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
observeData()
}
private fun observeData() {
lifecycleScope.launchWhenCreated {
viewModel.loading
.collect {
if (it) {
goNext()
}
}
}
}
private fun goNext() {
startActivity(Intent(this, AuthActivity::class.java))
finish()
}
}
SplashViewModel.kt
@HiltViewModel
class SplashViewModel @Inject constructor() : ViewModel() {
private val _loading = MutableStateFlow(false)
val loading: StateFlow<Boolean> get() = _loading
init {
viewModelScope.launch {
delay(1_000L)
_loading.value = true
}
}
}
* AndroidEntryPoint 는 Hilt 에서 사용되는 어노테이션 입니다.
위 코드처럼 사용해서 딜레이를 주는 방식으로 Flow 를 사용을 해봤습니다.
앞으로는 이 형태를 점점 발전시킬 생각입니다. 라이브 데이터 충분히 좋은 수단이지만,
그래도 한 번 플로우를 사용해서 점점 발전시킬 생각입니다. 감사합니다.ㅎㅎ
'안드로이드' 카테고리의 다른 글
[안드로이드] Github Actions으로 구글 플레이스토어 배포 with google-services.json (0) | 2021.08.26 |
---|---|
[알고리즘] Level Order, N-array Tree Postorder, Preorder (0) | 2021.08.06 |
[안드로이드] 그래 이게 UseCase 야. (2) | 2021.06.27 |
[안드로이드] 리싸이클러 뷰 개선기 (코드 특이하게 쓰네 ) (0) | 2021.06.15 |
[안드로이드] Android Studio 2021.1.1 Canary Bumblebee gradle error (0) | 2021.05.30 |
댓글