SH's Devlog — SH's Devlog

전체 글

공부한 내용을 정리하는 개발 기록 블로그
Android/Basic

[Android] 안드로이드 Looper와 Handler

안드로이드에서의 UI는 기본적으로 싱글스레드 모델로 작동하기 때문에 이러한 영향을 고려해서 개발하지 않으면 성능 저하가 일어날 수 있기 때문에 메인스레드에서의 작업을 최대한 피해야한다. 만약, 긴 시간이 걸리는 작업을 메인스레드에서 작업한다면 애플리케이션의 성능이 저하됨은 물론이고, 지나치게 많은 시간이 걸리는 경우 ANR(Application Not Responding)상태로 전환이 될 수 있다. 따라서 시간이 걸리는 작업을 수행해야 할 때에는 여분의 스레드를 활용하여 메인스레드와 분리해서 작업해야하고 자연스럽게 메인스레드와 다른 스레드가 통신하는 방법이 필요하다. Looper와 Handler의 사용 목적 메인 스레드와 다른 스레드가 어떤 TextView의 setText를 시도한다고 하면 둘 중 어느 ..

Android/Basic

[Android] ViewPager2 + TabLayout 연동

1. xml 작성 기존의 TabLayout 같은 경우에는 TabItem을 넣어주어서 Tab의 요소들을 넣어주었지만 TabLayoutMediator를 사용하므로 TabItem을 넣어주지 않는다. 이유는 TabLayout의 attach() 함수를 호출하면서 populateTabsFromPagerAdapter() 함수에서 어댑터에 있는 데이터들을 통해 Tab의 Item들을 설정해 주게 되는데 removeAllTabs()를 이용해서 그 전에 만들었었던 TabItem들을 모두 없애버리기 때문에 xml상에서 TabItem을 넣어주어도 의미가 없다. 그러므로, 자바 코드 상에서 TabItem을 넣어주도록 한다. TabLayoutMediator의 populateTabsFromPagerAdapter() 함수 @Suppr..

Android/JetPack

[Android] 안드로이드 SignleLiveEvent 와 Event Wrapper 클래스 (AAC ViewModel, LiveData 이슈)

지인에게 왜 화면 회전을 시키면 한번 띄워졌던 토스트메시지 혹은 Dialog가 왜 다시 띄워지는지 모르겠다는 질문을 받았습니다. 그 지인의 ViewModel 부분 코드입니다. 액티비티에서는 아래의 라이브데이터들을 observe하고 있습니다. val showDialog = MutableLiveData(false) val msg = MutableLiveData() 어떤점이 문제였을까요?? 문제가 발생한 이유 3가지 1. AAC ViewModel은 Activity의 모든 생명주기와 함께한다. AAC ViewModel은 Activity의 UI와 관련한 데이터를 보관하기 위해 설계되었습니다. 그러므로 Activity가 finish()되어서 ViewModel의 onCleared()가 불리지 않는 한 Activity..

Android/Error Log

[Android] <include> 태그 사용 시 오류

상위 xml ~~~ 생략 ~~~ 하위 xml 오류 내용 error: incompatible types: TbRankingBinding cannot be converted to ViewDataBinding setContainedBinding(this.layoutToolbar); 원인과 해결방법 해당 에러가 발생했던 이유는 너무나 간단하게도 상위 xml은 데이터바인딩 기반으로 xml을 구성하는데 하위 xml은 데이터바인딩을 인식하지 못해서 발생한 에러였다. 그래서 하위 xml도 데이터바인딩으로 묶어서 바로 해결!

Backend/Spring

[Spring] Kotlin으로 간단한 Spring-boot 프로젝트 만들기

안드로이드 개발자이지만, 간단하게 SpringBoot 프로젝트를 만드는 방법을 포스트해보고자 합니다. 프로젝트 생성 저같은 경우는 아직 학생신분이라서 Student License를 이용하여 Intellij Ultimate버전을 사용하므로 Intellij로 프로젝트를 생성할 수 있지만 Community버전을 이용하는 경우 https://start.spring.io 사이트를 통해 프로젝트를 생성하셔야합니다. 저같은 경우는 SpringBoot + Spring Data JPA + Kotlin + MySQL 조합을 사용하므로 저렇게 4개의 의존성을 추가해주었습니다. 또한 코틀린을 사용하므로 primary 생성자와 data class가 Lombok이 해주는 일을 모두 해주므로 의존성을 추가하지 않습니다. 프로젝트 ..

반응형
seunghwaan
SH's Devlog