SingleLiveEvent로 이벤트 처리하기

AAC lifecycle컴포넌트의 등장과 함께 MVVM패턴이 다소 변경되었습니다. 기존의 방식은 다음 그림과 같습니다. Activity와 ViewModel의 의존성을 분리하고 ViewModel은 Navigator를 이용하여 Activity에게 이벤트를 전달합니다. Navigator의 구현체는 보통 Activity가 되곤했었습니다. BaseObservable을 상속받아 ViewModel을 만들면 데이터바인딩 라이브러리와 궁합도 잘맞습니다. 그런데, AAC ViewModel을 사용하고 부터는 이 패턴을 사용할 수 없게 되었습니다. Caution: A ViewModel must never reference a 더보기…

안드로이드 VectorDrawable 알아보기

VectorDrawable 이전 포스트에서 Vector 이미지 포맷을 이용했을때의 장단점에 대해서 알아보았습니다. 이번 시간은 안드로이드 리소스인 VectorDrawable에 대해서 알아보도록 하겠습니다. xml 파일에서 <vector> 요소를 정의하는것을 통해 벡터 그래픽 방식의 drawable 파일을 생성 할 수 있습니다. Notice: 다시 그리는 퍼포먼스의 최적화를 위해 각 VectorDrawable에  대해 하나의 비트맵 캐시가 생성됩니다. 따라서 동일한 VectorDrawable을 참조한다는 것은 더보기…

Samsung Galaxy Foldable Emulator로 테스트 해보기

Testing with Foldable Emulator 테스트하기 앱 개발자는 접이식 환경에서 앱이 어떻게 반응하는지 테스트 할 수 있습니다. 이를 통해 응용 프로그램 연속성 및 다중 재개를 위해 제공되는 에뮬레이션 환경을 사용하여 올바르게 수행되었는지 확인할 수 있습니다. 앱 연속성 Android Studio 및 Android 태블릿에서 AVD (Android 가상 장치)를 실행할 수있는 에뮬레이터 앱이 제공되어 더보기…

Back 버튼이 Android Q 에서 부터는 없어질 수 있습니다.

Apple이 iPhoneX 부터 홈버튼을 없앴죠 Android Pie 부터는 안드로이드도 Home버튼에 제스쳐 기능을 넣어서 아이폰과 유사한 기능을 사용할 수 있게 되었었습니다. Android Pie에서 제스쳐 홈버튼 활성화 하는방법 일반: 설정 – 시스템 – 제스쳐 – 위로 스와이프하여 홈버튼 – 활성화 삼성 갤럭시 기준: 설정 – 디스플레이 – 네비게이션바 – 네비게이션 스타일 – 더보기…

글쓴이 Charlezz,

ViewPager2 톺아보기

Released ViewPager2! 구글이 ViewPager를 2011년에 릴리즈한 이후로 새로운 버전인 ViewPager2(알파버전)를 릴리즈 했습니다.  많은 개발자들이 페이지단위의 기능을 구현하기 위해 이 컴포넌트를 사용하고 있습니다.  많은 개발자들이 사용한다고 해서 사용하기 쉬운 컴포넌트는 아닙니다. ViewPager를 만들기위해서는 Adapter도 구현해야하며, 어떤 어댑터를 구현해야할지 항상 고민하게 됩니다. FragmentPagerAdapter를 써야할지 또는  FragmentStatePagerAdapter써야하는지 말이죠. 그리고 Fragment를 꼭 사용해야하는지도… New 더보기…

Android Custom View(커스텀 뷰) 만들기

커스텀 뷰 만들기 커스텀뷰는 왜 필요할까? 안드로이드 프레임워크에서 기본 제공되는 위젯들로는 Button, TextView, EditText, ListView, CheckBox, RadioButton, Spinner 등이 있고 레이아웃으로는 LinearLayout, FrameLayout, RelativeLayout 등이 있습니다. 하지만 실제로 앱을 만들다 보면 기획자, 디자이너, 사용자(클라이언트)의 요구사항에 맞는 기능을 위의 열거한 뷰들로 만들기 어렵거나 불가능한 경우가 부지기수입니다.  예를들면, 원형 썸네일을 표현하기 위한 더보기…

글쓴이 Charlezz,

Android Profiler로 네트워크 디버깅 하기

안드로이드 스튜디오가 3.3으로 업데이트 됨에 따라 Android Profiler 기능이 개선되었습니다. 이전에는 네트워크 프로파일러의 페이로드의 Raw텍스트만 표시되었는데 JSON, XML, HTML 형식을 지원합니다. View Parsed 또는 View Source를 클릭해서 서식있는 텍스트와 Raw텍스트를 번갈아가며 확인할 수 있습니다. Charles보다는 기능이 약하긴 하지만, 프록시 붙이는 작업이 없어서 편하네요(잠금화면, 인증서설치 등) 그 외 JSON이 구조화되어서 보이지 더보기…

Android Studio 3.3 주요 변경 사항

https://developer.android.com/studio/releases/ 을 번역한 내용입니다. Navigation Editor Navigation Achitecture Component 가 정식 릴리즈 됨에 따라 Navigation Editor를 사용하여 빠르게 액티비티와 프레그먼트의 이동을 가시화 시킬 수 있습니다. 사용하지 않는 안드로이드 스튜디오 디렉토리 삭제 Android Studio의 메이저 버전을 처음 실행할 때  캐시, 설정, 색인 및 로그가 포함 된 디렉토리를 찾습니다. 그런 다음 사용되지 않는 더보기…

글쓴이 Charlezz,

딥링크(Deeplink)와 앱링크(Applink)의 차이점

Applink? Deeplink? 딥링크는 인텐트필터의 일종으로 사용자들이 직접적으로 안드로이드 앱내의 액티비티에 접근하는것을 허용합니다. 다른 앱에서 또는 웹브라우저에서의 링크를 클릭했을때 해당 링크의 scheme을 보고 앱을 실행하게 되며, 해당 링크를 처리하는 2개이상의 앱이 있다면 사용자에게 다이얼로그를 띄어 앱을 실행할 수 있도록 유도 합니다.  앱링크는 인증된 웹사이트 URL을 기반으로 하는 딥링크입니다. 링크 클릭시 앱이 설치되어있다면 더보기…

글쓴이 Charlezz,

Dagger2와 AAC ViewModel을 같이 썼을 때 생길 수 있는 문제점

이 포스팅에서 Dagger2와 ViewModel에 대한 설명은 다루지 않습니다. Dagger2와 AAC의 ViewModel같이 썼을때의 문제점 Dagger2와 ViewModel을 같이 쓰다가 생긴 문제가 하나 있습니다. AAC뷰모델을 쓴다면, 액티비티의 configurationChange가 발생했을때 ViewModel의 인스턴스를 새로 만들지 않고 유지하는게 장점중 하나인데, Dagger2를 통해 ViewModel인스턴스를 인젝션했을 때 매번 새로운 인스턴스를 만들어낸다는 것입니다. 원인은 appcompat Support Library에 있었습니다. Activity의 더보기…