'분류 전체보기' 카테고리의 글 목록 (12 Page) — 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이 해주는 일을 모두 해주므로 의존성을 추가하지 않습니다. 프로젝트 ..

Android/RxJava

[RxJava] 조합 연산자(Combining Operators)

조합 연산자는 두개의 데이터를 조합해서 새로운 Observable을 만드는 연산자입니다. combineLatest combineLatest는 두개의 Observable에서 각각 데이터가 생성될 때 데이터를 조합해서 전달하는 연산자입니다. 첫 데이터는 두개의 Observable에서 모두 데이터가 생성됐을 때 전달이 되고, 그 이후에는 각각의 Observable에서 데이터가 생성 될 때 데이터를 조합해서 전달합니다. 예를 들면, Validation Check를 할 때에 사용할 수 있습니다. fun main() { //combineLatest val observable3 = Observable.interval(1000L, TimeUnit.MILLISECONDS) val observable4 = Observab..

Android/RxJava

[RxJava] 분류 연산자(Filtering Operators)

이번 포스트에서는 분류 연산자에 대해 정리하겠습니다. 분류 연산자는 통지된 데이터를 필터링 해주는 연산자입니다. debounce debounce는 짧은간격으로 연속된 이벤트가 발생하면 데이터를 전달하지 않다가 마지막 데이터가 생성된 후, 일정시간동안 다른 데이터가 생성이 되지 않는다면 데이터를 전달하는 연산자 입니다. e.g) 자동검색 등에 사용 첫번째 예시는, interval로 인해 250 밀리초 마다 데이터가 생성이 되고 debounce는 200 밀리초 로 걸려있지만, 200 밀리초 이후 계속 데이터가 들어오게 되므로 모두 정상적으로 구독이 되는 실행결과가 나타납니다. 두번째 예시는, interval 대신 intervalRange를 이용하여 250 밀리초 마다 데이터가 생성이 되고 debounce는 ..

Android/RxJava

[RxJava] 변환 연산자(Transforming Operators)

변환 연산자는 만들어진 데이터의 흐름을 변환하는 연산자 입니다. buffer buffer는 데이터를 바로 전달하지 않고 buffer의 size만큼 모일 때 까지 기다렸다가 List의 형태로 데이터를 방출하는 연산자입니다. count는 몇개씩 모아서 방출할 건지를 정하는 변수이고 skip은 몇개의 데이터가 모아졌을 때 전달할 건지 정하는 변수입니다. 뒤로가기 키를 눌렀을 때 호출되는 메소드인 onBackPressed()에서 buffer 연산자를 이용해서 두개의 시간값을 비교해서 뒤로가기를 빠르게 눌렀을 때 종료하는 기능을 만들 수 있습니다. fun main() { Observable.fromIterable(0..10) .buffer(2, 1) .subscribe { println(it)} Thread.sl..

Android/RxJava

[RxJava] 생성 연산자(Creating Operators)

이번 포스트에서는 생성 연산자를 정리하겠습니다. just just는 인자로 받은 데이터들을 순서대로 통지하는 Observable을 생성하는 연산자 입니다. 주의할 점은, just 연산자는 Observable의 생성시점이 선언한 시점이기 때문에 원하는 동작으로 수행되지 않을 수 있으므로 사용할 때 주의해야 합니다. 그러므로, just 연산자 혹은 from 연산자를 사용해야할 경우에는 Observable을 지연생성해주는 create, fromCallable을 사용하거나 defer로 감싸주는 것을 권장합니다. fun main() { Observable .just(0,1,2,3) .map { it * 2} .subscribe { println(it) } } 실행결과 craete create는 Observable..

Android/RxJava

[RxJava] 생산자와 소비자 정리

RxJava는 데이터를 만들고 통지하는 생산자와 통지된 데이터를 받아 처리하는 소비자로 구성됩니다. 이 생산자를 소비자가 구독해 생산자가 통지한 데이터를 소비자가 받게 됩니다. RxJava에서 이 생산자와 소비자의 관계는 크게 두 가지로 나뉩니다. 하나는 Reactive Streams를 지원하는 Flowable과 Subscriber, 다른 하나는 Reactive Streams를 지원하지 않고 배압 기능이 없는 Observable과 Observer입니다. 구분 생산자 소비자 Reactive Streams 지원 Flowable Subscriber Reactive Streams 미지원 Observable Observer Flowable은 Reactive Streams의 생산자인 Publisher를 구현한 클래..

반응형
seunghwaan
'분류 전체보기' 카테고리의 글 목록 (12 Page)