분류 전체보기(80)
-
Using Room (With HILT)
Add Dependencyimplementation 'androidx.room:room-runtime:2.4.3' kapt 'androidx.room:room-compiler:2.4.3' implementation 'androidx.room:room-ktx:2.4.3' Creating Package클린아키텍처 & Hilt 를 따른다고 가정하고, 다음과 같이 패키지를 만든다 Preparing Entity & DAO & Databaseutils → Constants.ktobject Constants { const val CONTACTS_TABLE = "contacts_table" const val CONTACTS_DATABASE = "contacts_database" } db → ContactsEntity...
2023.07.25 -
Memory leaks
정적 필드에서 참조되는 개체static field는 일반 instance 변수보다 수명이 더 길기때문 개체가 정적 필드에 저장될 때 메모리 누수 발생 가능성이 있음. 적절히 onDestroy등에 해제시켜줘야함 class MainActivity : AppCompatActivity() { companion object { private var instance: MainActivity? = null } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) instance = this } //메모리 해제~ override fun onDestroy() { super.onDestroy() instance = nu..
2023.07.25 -
Commit Convention
Commit Message 사전동명사보다 명사를 사용합니다.동사를 명사화시키기 보다는 그 의미를 잘 표현하는 명사를 찾아서 사용합니다. 이렇게하면 문장이 장황하지 않고 간결해집니다. 아무래도 영어에 약한 사람들에게 가장 어려운 미션 중 하나가 아닐까 생각됩니다.관사는 사용하지 않습니다.꼭 필요한 경우가 아니면 a, an, the는 사용하지 않습니다.부정문 Don't를 사용합니다.커밋 메시지를 명령문 형태로 써야 한다는 것은 모두들 알고 있지만, 부정 명령문을 사용하는 것은 잘 모릅니다. ‘A를 사용해’라고 명령했으니 반대를 이야기 할 때는 ‘A를 사용하지마’로 표현해야 합니다. Not use가 아니라 Don’t use 입니다.Don't use spdy on node >= v10.0.0 Don't writ..
2023.07.25 -
Data Store
What is DataStoreSharedPreferences의 대체제Kotlin&Coroutine&Flow사용데이터를 비동기식으로 저장함 DataStore을 사용하는 이유SharedPreferences는 Main스레드로부터 안전하지않음….→ DataStore은 Dispatchers.IO를 사용해 UI스레드를 사용한다~runtime exception으로부터 안전하다SharedPreferences로부터의 migration을 지원한다Protocol buffer를 사용해서 Type safety를 지원한다! DataStore이 지원하는 두 가지 유형Preference DataStore key / value 값 쌍을 사용해 데이터를 저장함. but 형식 안전성을 제공하지는 않음Proto DataStore프로토콜 ..
2023.07.25 -
뷰모델 중복 이슈 해결
https://medium.com/prnd/mvvm의-viewmodel에서-이벤트를-처리하는-방법-6가지-31bb183a88ce 뷰모델의 문제점 뷰모델은 뷰가 변경되면 가장 최근 값들로 .observe를 해주는데 , 중요한건 이게 값이 바뀌지 않아도 최근 값을 걍 들고오기때문에….. 토스트를 띄운 후 나갔다가 다시 fragment 갱신 → 토스트 재생성과 같은 중복 이슈가 발생하게 된다. 해결 방안 사실 이 문제는 아주 흔한 것이라서 구글에서 이미 해결책을 내놨다. 나는 SharedFlow + Sealed class + Lifecycle 를 사용했다. SharedFlow private val _eventflow = MutableSharedFlow() val eventflow: MutableSharedFl..
2023.05.03 -
QA / release모드 변경
원인 firebase crashlytics에서 qa 버전, release 버전이 혼용되어 사용중임… 보기 불편.. qa만 따로 모아서 보고싶음 해결 방안 firebase 콘솔에서 앱 추가해줌 패키지명 설정 (나중에 빌드시에 이걸로 되는거 감안해서 크게 다르지 않은걸로 설정) service-json받음 -> 나는 원래 파일이 .app내에 있어서 거기 위치시켜줌 .env 업데이트 (패키지명 변경으로 앱 아이디도 변경됨) RELEASE_APP_ID = "릴리즈앱의 아이디(in fb project)" QA_APP_ID = "QA앱의 아이디(in fb project)" FIREBASE_TOKEN = "FB토큰" GOOGLE_DRIVE_FOLDER_ID = "업로드할 구글 드라이브 폴더의 id" SIGNING_KE..
2023.05.03