티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
How to get Context in Android MVVM ViewModel
Android MVVM ViewModel에서 Context를 얻는 방법
문제 내용
I am trying to implement MVVM pattern in my android app. I have read that ViewModels should contain no android specific code (to make testing easier), however I need to use context for various things (getting resources from xml, initializing preferences, etc). What is the best way to do this? I saw that AndroidViewModel
has a reference to the application context, however that contains android specific code so I'm not sure if that should be in the ViewModel. Also those tie into the Activity lifecycle events, but I am using dagger to manage the scope of components so I'm not sure how that would affect it. I am new to the MVVM pattern and Dagger so any help is appreciated!
저는 안드로이드 앱에서 MVVM 패턴을 구현하려고 합니다. ViewModel에는 안드로이드에 특화된 코드가 없어야한다는 것을 알고 있지만(context를 사용하여 xml에서 리소스 가져오기, 환경설정 초기화 등), 다양한 것들을 위해 context를 사용해야합니다. 어떻게 해야할까요? AndroidViewModel에는 애플리케이션 컨텍스트에 대한 참조가 있지만, 그것은 안드로이드에 특화된 코드를 포함하기 때문에 ViewModel에 들어가는지 확실하지 않습니다. 또한 그것들은 Activity 생명주기 이벤트에 연결되어 있지만, Dagger를 사용하여 구성 요소의 범위를 관리하고 있기 때문에 어떻게 영향을 미치는지 알 수 없습니다. MVVM 패턴과 Dagger에 대해 새로운 사용자이므로 도움이 필요합니다!
높은 점수를 받은 Solution
For Android Architecture Components View Model,
안드로이드 아키텍처 컴포넌트 뷰 모델에 대해서,
Edit 1 : It's not a good practice to pass your Activity Context to the Activity's ViewModel as its a memory leak. You shouldn't be need your context this way as there are better ways to write your code and there are better ways to manage the reference to your UI as well with AndroidViewModel.
편집 1: Activity의 ViewModel에 Activity Context를 전달하는 것은 메모리 누수가 발생할 수 있는 좋지 않은 방법입니다. AndroidViewModel을 사용하면 UI에 대한 참조를 더 잘 관리할 수 있고 코드를 더 잘 작성할 수 있으므로 이렇게 Context를 사용할 필요가 없습니다.
Hence to get the context in your ViewModel, the ViewModel class should extend the Android View Model Class. That way you can get the context as shown in the example code below.
따라서 ViewModel에서 context를 가져오기 위해서는 ViewModel 클래스가 Android ViewModel 클래스를 확장해야합니다. 아래의 예시 코드에서 보여지는 것처럼, 이렇게 하면 context를 가져올 수 있습니다.
private val context = getApplication<Application>().applicationContext
가장 최근 달린 Solution
This is a way to get Context in to ViewModel
이는 ViewModel 내에서 Context를 가져오는 방법 중 하나입니다.
private val context = getApplication<Application>().applicationContext
출처 : https://stackoverflow.com/questions/51451819/how-to-get-context-in-android-mvvm-viewmodel
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드에서 사용자 지정 뷰의 높이와 너비를 프로그래밍 방식으로 설정하기 (0) | 2023.02.16 |
---|---|
안드로이드 WebView에서 JavaScript가 작동하지 않을 때 해결 방법 (0) | 2023.02.16 |
Android - WebView에서 화면 회전 시 새로 고침 막는 방법 (0) | 2023.02.14 |
WebView 스레드 오류 수정하기 (0) | 2023.02.13 |
'This Handler class should be static or leaks might occur: IncomingHandler' 오류 수정하기 (0) | 2023.02.13 |