ViewStub 활용으로 성능 높이기

ViewStub이란? ViewStub은 사이즈가 없는 보이지 않는 뷰로 런타임에서 늦은 전개(lazy-inflate)를 원할 때 사용할 수 있다. ViewStub을 보이게 만들거나 inflate() 메서드를 호출하면 레이아웃이 전개되면서 ViewStub을 대체하기 때문에 ViewStub은 사라진다. 전개된 뷰는 ViewStub의 부모 뷰에 추가 된다. 레이아웃에서 ViewStub을 사용하는 예제를 확인하자. <ViewStub android:id=”@+id/stub”           android:inflatedId=”@+id/subTree”     더보기…

Room 컴파일러 옵션 중 room.expandProjection 사용하기

room.expandProjection 옵션 2019년 10월 9일 Room 2.2.0 stable 버전이 출시 됨에 따라  room.expandProjection 옵션을 사용할 수 있게 되었다. room.expandProjection 옵션 설정하기 android { … defaultConfig { … javaCompileOptions { annotationProcessorOptions { arguments = [“room.expandProjection”:”true”] } } } } 릴리즈 노트 및 공식문서에 다음과 같은 내용이 있다. room.expandProjection: Configures Room to 더보기…

글쓴이 Charlezz,

Glide를 사용함에도 trying to draw too large … bytes bitmap 메시지가 나온다면

“Canvas: trying to draw too large(” + bitmapSize + “bytes) bitmap.” 위 메시지가 나오는 상황은 DisplayListCanvas에 100MB이상의 Bitmap을 그릴 때 나오는 메시지다. Glide를 사용하고 있음에도 불구하고 해당 메시지가 출력되는것을 확인했다. 이유는 Aspect Ratio가 아주클 때, 예를들어 아주 긴 이미지를 출력할 때 문제가 되었다. 일반적인 경우에는 문제가 되질 않지만 나의 경우 더보기…

글쓴이 Charlezz,

View에 둥근 모서리를 갖는 배경색 지정하기

둥근 모서리를 갖는 단색 배경을 지정하려다 보면 다음과 같이 xml 을 정의한 뒤 View의 배경으로 지정할 수 있다. 하지만 다른 뷰에서 색상이나 radius 값을 변경해야하는 경우 이 xml 을 재사용하기는 쉽지 않다. 그래서 Databinding을 활용해보기로 한다. xml내에서 View 속성에 간단히 radius 값을 입력하는것으로 단색의 둥근 배경을 만들 수 있다.

안드로이드 클린 아키텍처

What is Clean Archtecture? 클린 아키텍처는 Robert C. Martin에 의해 만들어졌으며 그의 블로그 Uncle Bob에서 소개되었으며, 관심사를 계층별로 분리하는 소프트웨어 디자인 철학이다.  클린 아키텍처의 주요 원칙은 코드 종속성이 외부로부터 내부로 의존한다는 것이다.  내부 계층의 코드는 외부 계층의 기능을 알 수 없다. 외부 계층에 존재하는 변수, 함수 및 클래스 (모든 엔티티)는 안쪽계층에서 다시 등장할 더보기…

안드로이드 하드웨어 가속

안드로이드 하드웨어 가속 Android 3.0 (API 레벨 11)부터 Android 2D 렌더링 파이프 라인은 하드웨어 가속을 지원합니다. 즉, View의 캔버스 에서 수행되는 모든 그리기 작업이 GPU를 사용합니다. 하드웨어 가속을 활성화하는 데 필요한 리소스가 증가하기 때문에 앱에서 더 많은 RAM을 소비합니다. 타겟 API 레벨이 14 이상인 경우 기본적으로 하드웨어 가속이 활성화되지만 명시적으로 활성화 할 수도 있습니다. 애플리케이션에서 일반적인View와 Drawable만 사용하는 더보기…

글쓴이 Charlezz,

안드로이드 서비스 심층 분석

원문 : https://proandroiddev.com/deep-dive-into-android-services-4830b8c9a09 안드로이드 Service로 빠져 봅시다 소개 안드로이드에서 종종 백그라운드 실행이 필요한 작업을 수행해야합니다. 이럴경우 메인쓰레드가 아닌 서브쓰레드를 생성하여 사용하게 됩니다. 하지만 예기치 않은 결과가 발생할 수 있습니다. 예를들어 서브쓰레드를 수행한 뒤 액티비티 화면 회전 등으로 인해 onDestroy()가 호출되고,  서브 쓰레드의 작업이 끝났을 때 해당 Activity는 존재하지 않는 상태라면 UI갱신을 더보기…

글쓴이 Charlezz,

Navigation Component 특징 및 사용시 유의점

Navigation 컴포넌트를 쓰면 여러화면(Fragment)을 하나의 Activity로 묶어서 그래프라는 개념으로 관리하게 된다. (1 Activity – N Fragments) Fragment의 전환을 직접 FragmentManager를 통해 해줘야했지만, Navigation을 쓰게 되면 FragmentManager를 통한 화면 전환을 직접 할 필요가 없다. Up 과 Back 에 대한 액션을 네비게이션 컴포넌트에게 위임하게 된다. (기본적으로 사용자 친화적으로 매우 잘 동작한다)  기본적으로 더보기…

글쓴이 Charlezz,

매우 늦었지만 카메라 앱과 관련된 LG G5 특징

개발을 하다 보면 특정기기에서만 알수 없는 이유로 앱이 크래쉬가 나거나 오류가 발생하곤 한다. 원인을 파악하기 위해 파헤치다보면 간혹 프레임워크의 버그이거나 특정기기의 소프트웨어 문제이거나 아니면 내가 모르는 문제이다.  카메라와 관련된 앱을 개발하면서 알게된 G5 관련 이슈 2가지가 있다. 사진 저장 경로 문제 일반적으로 사진을 찍을 때 다음과 같이 인텐트를 구성해서 액티비티를 더보기…

글쓴이 Charlezz,