Navigation Component의 한계

더 이상 Navigation Component에 한계는 없어보입니다. Dagger 이슈는 Lazy 인젝션으로 해결가능합니다. SharedElementTransition은 이제 네비게이션 컴포넌트에서 공식적으로 지원합니다.   Navigation Component의 한계 Dagger와 Databinding 그리고 fragment의 초기화 문제 어떤 액티비티가 xml 레이아웃을 dagger를 이용하여 바인딩객체를 주인한다고 가정하자. 이때 액티비티의 xml 레이아웃내에 <fragment> element를 써서 프레그먼트를 초기화 하는 경우 액티비티의 레이아웃조차도 인플레이팅이 더보기…

Android Architecture Component – WorkManager

WorkManager로 작업 처리 하기 WorkManager API는 특정 유예가능하며, 비동기 적인 작업들을 쉽게 처리할 수 있게 해줍니다. 이 API들은 개발자들이 작업(Work)을 만들게 하고 WorkManager에게 작업을 넘긴뒤 즉각적으로 또는 적당한 때에 해당 작업을 수행 할 수 있도록 합니다. 예를들면, 앱은 가끔 새로운 리소스를 네트워크로부터 다운로드 받아야하는데, WorkManager를 이용한다면 Task를 설정하고, 실행하기 위한 더보기…

글쓴이 Charlezz,

Android Architecture Component – Room

Room을 활용하여 Local 데이터베이스에 data를 저장해보자 Room 은 SQLite를 추상계층으로 감싸고 있으며, 쉽게 데이터베이스에 접근하여 SQLite를 마구마구 자유롭게 풀파워로 사용할 수 있다. Room을 사용한다면 만만치 않은 양의 구조화된 데이터를 영구적으로 저장하고 처리하는 애플리케이션도 그뤠잇 하게 이득을 볼수 있는 부분이 있다. 대부분의 경우는 관련 데이터의 조각들을 캐시화 하는것이였다. 이 방법에서는 기기가 더보기…

글쓴이 Charlezz,

Android Architecture Component – Navigation

네비게이션 컴포넌트는 애플리케이션의 화면간의 이동을 구현하는것을 단순화 시켜주는 라이브러리이다. Jetpack에는 포함되어있지만 androidx로 패키지 리팩토링은 진행중이며, 게다가 아직은 보편화되지 않은컴포넌트인지라 ‘Navigation’이라는 키워드로 검색하면 Navigation View, Navigation bar 등의 자료가 더 많아 공식문서 외에는 정보를 접하기가 어렵다. 사실 발표되지 얼마 않은 기술들은 공식문서가 제일 보기 좋다.   네비게이션의 기본 원칙   1. 더보기…

Android Architecture Component – ViewModel

ViewModel 개요 ViewModel은 UI와 관련된 data를 생명주기를 신경쓰면서 저장하거나 관리하기위해서 설계된 클래스이다. ViewModel은 screen rotation 과 같은 configuration변화에서도 살아남는다. 안드로이드 프레임워크는 액티비티나 프레그먼트같은 UI컨트롤러의 생명주기를 관리한다. 안드로이드 프레임워크는 사용자의 행동이나 또는 개발자가 제어할 수 없는 어떤 이벤트(메모리부족 등)로 인해, 아마 UI컨트롤러를 파괴하거나 재생성하게 된다. 만약 시스템이 UI컨트롤러를 파괴하거나 재생성한다면 UI와 관련된 더보기…

글쓴이 Charlezz,

Android Architecture Component – LiveData

개요 LiveData 는 Data의 변경을 관측할 수 있는 Data Holder 클래스 입니다. 일반적인 Observable과는 다르게 LiveData는 생명주기를 알고 있습니다.(Lifecycle-Aware) 액티비티나, 프레그먼트, 서비스 등과 같은 컴포넌트의 생명주기(Lifecycle)를 존중하고 그에따라 LiveData는 활성상태(active)일때만 데이터를 업데이트 합니다. 활성상태란 STARTED 또는 RESUMED를 의미합니다. Lifecycle State CREATED Created state for a LifecycleOwner. DESTROYED Destroyed state for a LifecycleOwner. 더보기…

글쓴이 Charlezz,

AAC – LiveData (의역)

LiveData LiveData는 생명주기를 알 수 있는 데이터 홀더 클래스입니다. 무슨 뜻이냐면 옵저버가 LifecycleOwner에 추가 될 수 있고, LifecycleOwner가 활성화 되어있을때 래핑된 데이터들의 수정사항에 대한 알림을 받을 수 있음을 뜻합니다. 상태가 STARTED 또는 RESUMED이면 LifecycleOwner는 활성상태 입니다. observeForever에 의해 추가된 observer는 항상 활성화 된 것으로 간주되므로 수정된 내용에 대해 항상 알림을 받을 더보기…

글쓴이 Charlezz,

AAC – ViewModel (의역)

Android Arcitecture Component – ViewModel    ViewModel 클래스는 UI  관련된 데이터를 생명주기를 고려한 방식으로 저장하고 관리하도록 설계 되어있습니다. ViewModel 클래스를 사용하면 화면 회전과 같은 구성 변경 사항에도 데이터가 그대로 유지 된다. Note : ViewModel을 안드로이드 프로젝트로 가져오려면 프로젝트에 AAC 라이브러리를 추가해야합니다. 안드로이드 프레임워크는 액티비티와 프레그먼트 같은 UI 컨트롤러의 생명주기를 관리합니다. 프레임워크는 더보기…

글쓴이 Charlezz,

(AnimatedVectorDrawable) Turn Record Button into StopButton

AnimatedVectorDrawable? AnimatedVectorDrawable 클래스는 VectorDrawable, ObjectAnimator 또는 AnimatorSet과 함께 동작하는 애니메이션 효과 주는 클래스입니다 API25레벨 이전에는  UI 쓰레드에서 동작했던것과는 달리, API 25레벨부터는 RenderThread에서 동작합니다. 그래서 UI 쓰레드에 작업량이 많아도 동작이 매우 부드럽습니다. UI쓰레드가 응답하지 않아도 UI쓰레드가 다음 프레임을 처리할수 있을 때까지 계속 애니메이션을 적용 할 수 있습니다. 따라서 RenderThread 가 활성된 더보기…

글쓴이 Charlezz,

Screen Recorder 만들기

ScreenRecorder 화면 녹화 프로세스 비디오 코덱으로 부터 얻은 Surface를 통해 VirtualDisplay를 생성하였다면, 비디오코덱의 출력버퍼로부터 부호화된 프레임 버퍼를 얻을수 있다. AudioRecord로 부터 얻은 오디오 버퍼(PCM)를  오디오 코덱의 입력버퍼에 넣고 큐에 넣는다면, 출력버퍼로부터 부호화된 오디오 버퍼를 얻을수 있다. MediaMuxer에 비디오와 오디오트랙을 추가하고, start() 한다. muxer.writeSampleData(trackIndex, buffer) 메소드를 통해 먹싱을 한다. 녹화를 중지하고 더보기…