'Android' 카테고리의 글 목록 (6 Page) — SH's Devlog

Android

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도 데이터바인딩으로 묶어서 바로 해결!

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를 구현한 클래..

Android/RxJava

[RxJava] Reactive Programming과 Rxjava 개념 정리

RxJava 개념정리에 대한 포스트들을 정리할 때 참고한 책은 스다 토모유키님이 쓰신 RxJava 리액티브 프로그래밍이고 StudyFork(정석준님 안드로이드 스터디)에서 진행한 RxJava 스터디에서 공부한 내용 또한 같이 정리하였습니다. Reactive Programming이란? Rxjava를 공부하기에 앞서서 Reactive Programming이란 무엇인가에 대해 알아야 할 필요가 있습니다. Reactive Programming이란, 데이터가 통지될 때마다 관련 프로그램이 반응(Reaction)해 데이터를 처리하는 프로그래밍 방식입니다. 예를 들면, GPS 위치 정보가 변경될 때의 데이터 전송 흐름을 상상해보면 이해가 쉽습니다. 이동해 위치 정보가 변경될 때마다 데이터를 전송하고 이동을 멈추면 데..

반응형
seunghwaan
'Android' 카테고리의 글 목록 (6 Page)