마케팅과 웹 분석에서, A/B 테스트(버킷 테스트 또는 분할-실행 테스트)는 두 개의 변형 A와 B를 사용하는 종합 대조 실험(controlled experiment)이다.출처 : 위키백과웹사이트에서 A/B Test를 한다면?UI/UX 측면에 있어서 사용자들로 하여금
enum 클래스의 확장형태로 클래스들을 묶은 클래스이다.enum은 여러 제약사항이 있다.각각의 enum 상수에 대해 하나의 인스턴스만 생성할 수 있다.주어진 enum에 대한 상태를 변경할 수 없다.enum에 대한 서브클래스를 생성할 수 없다.이런 제약들 떄문에 내가 만
How About Recyclerview Mechanism?우리는 안드로이드 앱을 프로그래밍 할 때, 리사이클러 뷰를 많이, 자주 쓰고 있다. 그렇다면 우리는 이 리사이클러뷰가 내부적으로(안드로이드 시스템 측면에서) 어떤 메커니즘으로 이루어지는 알아볼 필요가 있다.지금
Android에는 Context가 5가지가 있다.getApplicationgetApplicationContextgetBaseContextgetContextthis먼저, 안드로이드 프레임워크에서 Context는 2종류로 나뉜다.Application ContextActiv
an XML file which contains important metadata about the Android app.안드로이드 앱이라면 이 파일이 필수적으로 필요하다. manifest 파일은 Android 빌드 도구, Android 운영체제 및 Google Pla
시스템 레벨에서 발생한다. 시스템에 비정상적인 상황이 생겼을 때 발생하며 시스템 레벨에서 발생하기 대문에 심각한 수준의 오류이다.그래서 시스템에 변화를 줘서 문제를 처리해야 하는 경우가 일반적이다.개발자가 구현한 로직에서 발생한다.예외가 발생할 상황을 미리 예측하여 처
재사용하고 싶은 컴포넌트를 레이아웃에 넣을 때, include 태그를 사용한다.ex) 상단바와 같이 재사용하는 컴포넌트를 적용할 유용merge는 include 태그와 함께 더미뷰를 생성해 준다.include 됐을 때, merge 태그는 무시되고 그 자식 View들을
이번엔 레퍼런스가 된 글을 먼저 소개하고 시작하겠다.Serializable VS Parcelabe직렬화란?안드로이드 - Serializable를 활용한 다른 액티비티에 객체(Object) 전달하기serialVersionUID 란 무엇입니까?두 개의 사용법을 비교하기 앞
exception은 error와 다르다.시스템 레벨에서 오류 : error개발자 레벨에서 오류: exceptionRunTime Exception 기준으로 checked, unchecked exception으로 나뉜다.checked : 컴파일단계에서 남uncheced :
Start Point (진입점) 대게 IDE로 코드를 실행한다면 main 함수가 있습니다. 특히 자바에서는 따로 약속한 사실처럼 >JAVA 는 어플리케이션이 실행되면 제일먼저 메인(main)메소드를 실행한다. 라는 명시적인 함수가 있는데, 바로 public s
비동기적이고 일관된 트랜잭션 방식으로 데이터를 저장하여 SharedPreferences의 일부 단점을 극복합니다. - Android Developer최근 라이브러리 버전 1.0.0아니 Shared Preferences의 상위호환인건 알겠는데 도대체 어떻게 무엇을 구체적
Proto DataStore
백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사용자 인터페이스를 제공하지 않습니다.다른 애플리케이션 구성 요소가 서비스를 시작할 수 있으며, 이는 사용자가 다른 애플리케이션으로 전환하더라도 백그라운드에서 계속해서 실행됩니다.구성 요소를
이 글은 아래 링크를 번역한 글입니다https://py.hashnode.dev/workmanager-multi-process-for-librariesWorkManager라는 라이브러리는 원격 프로세스 작업을 스케줄링해서 사용할 수 있다는 걸 알고 있습니까? 앞
Android 런타임(ART)과 Dalvik 가상 머신은 페이징과 메모리 매핑(mmapping)을 사용하여 메모리를 관리합니다. 즉, 새로운 개체를 할당해서든 메모리 매핑된 페이지를 터치해서든 앱이 수정하는 모든 메모리는 RAM에 계속 유지되며 페이지 아웃될 수 없습니
이 포스트는 <안드로이드 프로그래밍 Next Step> 챕터 1을 보고 작성한 글입니다.이 포스트에서는 안드로이드 아키텍처에 대한 것들을 속속히 알아볼 것이다.공식 문서 속 다이어그램, 안드로이드 아키텍처안드로이드에서 제공하는 선탑재 기본 앱(홈, 카메라, 전화,
이 포스트는 Android Main Method에서도 필수적으로 쓰이고 있는 핸들러 클래스에 대한 이야기를 자세하게 살펴보는 포스트입니다.Handler는 Message를 MessageQueue에 넣는 기능과 MessageQueue에서 꺼내 처리하는 기능을 함께 제공합니
메인 스레드에서 UI 변경 메커니즘을 간단히 살펴보자. 언제 UI가 변경되고 변경되지 않는지 메커니즘을 이해한다면 더 정확하게 코드를 작성할 수 있다.UI를 변경하는 메서드는 TextView에서처럼 주로 setXxx()로 되어 있다. 게다가 커스텀 뷰를 만들면서 이런
코루틴에서 Flow는 단일 값만 반환하는 suspend 함수와 달리 여러 값을 순차적으로 내보낼 수 있습니다. 예를 들면 flow을 사용하여 데이터베이스에서 실시간 업데이트를 수신할 수 있습니다.flow은 코루틴을 기반으로 빌드되며 여러 값을 제공할 수 있습니다. fl
백그라운드 스레드를 활용하면 앱의 성능을 향상하는 데 많은 도움이 된다. 그 중 구조가 단순한 HandlerThread를 살펴보자.HandlerThread는 Thread를 상속하고, 내부에서 Looper.prepare()와 Looper.loop()를 실행하는 Loope
스레드를 만들려면 Thread를 상속하거나 Thread(Runnable) 생성자에 Runnable을 넘기는 방법이 있지만, 스레드 풀을 사용하는 방법도 있다.스레드 풀은 대기 상태의 스레드를 유지해서 스레드 종료/생성 오버헤드를 줄입으로써, 많은 개수의 비동기 작업을
앱 개발을 하다보면, Context는 필요하다. 이가 없으면 액티비티를 시작할 수도, 브로드캐스트를 발생시킬 수도, 서비스를 시작할 수도 없다. 리소스에 접근할 때도 Context를 통해서만 가능하다.Context는 여러 컴포넌트의 상위 클래스이면서 Context를 통
액티비티는 앱에서 기본 단위가 되고 가장 많이 쓰이는 컴포넌트다. 앞으로 몇 편을 나누어 액티비티에 관해 포스팅을 하려고 한다.그 전에 간단한 내용부터 시작해보자.액티비티는 다른 컴포넌트와 마찬가지로 AndroidManifest.xml에 선언해야 한다. 설정 파일에 액
많이들 액티비티의 생명주기하면 공식처럼 알 것이다. 처음 액티비티가 시작하면 onCreate 메서드를 타고 onStart onResume 를 거쳐 실행이 되고 종료되면 또 그에 맞게 플로우를 타리라고. 그치만 이 포스트에서는 다 알법한 이야기보다는 자세한 이야기를 해볼
우리는 앱을 이용하면서 백그라운드 서비스를 이용하는 일이 많다.음악을 계속 듣는다던지, 영상이 어떤 화면에서든 스트리밍이 가능하다던지 (ex. 갤럭시는 pip로) 백그라운드는 정말 다양하게 쓰인다.하지만 성능 역시 빠질 수가 없는데 구글에서는 이를 위해 백그라운드 처리
구성(Configuration)은 컴포넌트에서 어떤 리소스를 사용할지 결정하는 조건이고, 이 조건 항목은 프레임워크에서 정해져 있다.보통 화면 회전할 시, 액티비티의 생명주기는 onDestroy()까지 실행되고 다시 onCreate()부터 실행되는데 이 때의 화면 방향
영상 출처 : https://youtu.be/t1_8WSEguDY!주의 : 혼자 영상 보고 의역하고 정리한 글이므로 정확하지 않을 수 있습니다. 해당 글은 정말 간단한 요약본으로 영상 보는 것을 추천합니다안드로이드는 사용자와 개발자 사이에서 밸런스를 맞추고 모
오늘의 시리즈는 "Task"다.태스크는 간단하게 액티비티 작업 묶음 단위라고 보면 된다.예를 들면, 사진 리스트를 보고 PictureListActivity, 사진 상세를 살펴보고 PictureDetailActivity, 사진을 올리려고 카메라를 실행시킨다(카메라 앱의
꽤나 예전부터 회사에서 쓰고 있던 레거시로 RxJava가 있는데, 우린 이 RxJava를 제거하자고 1년 전부터 결정을 내렸다. 하지만 완전 도려내기엔 생각보다 많이 쓰이고, 엮여 있었다. api 호출은 java를 kotlin으로 바꾸고 Single Architectu
예전에도 한 번 포그라운드, 백그라운드 서비스 정리하면서 서비스에 관해서 정리한 적이 있는데, 이번 포스팅은 정말 서비스에 관해서다.Next Step의 서비스 파트이기도 하고 조금 더 기본 지식을 정리하면 좋을 거 같아서 액티비티 시리즈에 이어 서비스 파트도 쭉 정리해
https://velog.io/@woga1999/Android-Service전편에서 이야기했던 거처럼 이 UnBounded Service를 Started Service라고 부르겠다스타티드 서비스는 Context의 startService() 메서드로 시작된다.이
안드로이드 멀티스레딩 - Efficient Android Threading레퍼런스를 먼저 밝히고 시작하겠다. 이 포스팅은 위 책을 읽고 한 파트를 정리한 포스팅이다읽으면서 인사이트를 가진 부분이나 새로 안 사실들 혹은 기존에 알고 있던 걸 명확하게 정리하기 위해 작성한
바운드 서비스는 서비스에서 제공하는 메서드를 다른 컴포넌트에서 호출할 수 있게 한 것으로 사용 절차는 간단하다.먼저 bindService() 메서드를 실행해서 바인딩하고서 이후에 필요한 메서드를 호출한다.Context에 있는 bindService()의 메서드 시그니처는
오늘의 포스팅은 아래 링크의 번역본입니다. 흥미로운 주제를 담고 있길래 갖고왔습니다.ViewModel: One-off event antipatterns또한, 이 글은 UILayer 아키첵처 배경지식을 필요로 하니 공식문서 링크도 아래에 첨부했으니 참고하면 좋을 거 같습
Lazy는 lazy initalization 기능을 제공한다즉, 선언 즉시 생성이 아니라 접근(access by Value 프로퍼티)하려하면 그때 생성시켜 준다.어떤 경우에 더 유용할까?생성에 시간이 오래 걸리는 큰 오브젝트를 필요로 할 때만 생성 → 프로그램 구동 속
콘텐트 프로바이더는 외부 프로세스에 데이터를 제공하는 표준 인터페이스다.콘텐트 프로바이더에서 주로 데이터 소스로 사용하는 SQLite를 살펴보고 세부 내용을 살펴보자SQLite는 로컬 DB지만 속도가 그렇게 빠르지 않다. 딱 개인 프로젝트 혼자서 할때 쓸 수 있는 정도
https://velog.io/@woga1999/Android-%EC%BD%98%ED%85%90%ED%8A%B8-%ED%94%84%EB%A1%9C%EB%B0%94%EC%9D%B4%EB%8D%94-SQLite이 편에 이어 이번엔 콘텐트 프로바이더에 대해 이야기해
브로드캐스트 리시버하면 안드로이드에서 빠질 수 없는 4대 컴포넌트 중에 하나다. 근데 우린 이에 대해 잘 알고 있을까? 조금 더 자세하게 알아보고 정리하고자 포스팅을 한다브로드캐스트 리시버는 옵저버(Observer) 패턴을 안드로이드에서 구현한 방식이다. 어디선가 특별
브로드 캐스트는 브로드 캐스트만 있는게 아닌 다양한 종류가 있다.sendOrderedBroadcast(Intent intent, String receiverPermission) 메서드는 등록된 브로드캐스트 리시버 가운데 priority 값이 높은 순으로 전달한다.pro
Context의 sendBroadcast() 는 Binder IPC를 통해 ActivityManagerService를 거쳐야하므로 속도에서 이점이 크지 않다.또한, Intent 액션을 안다면 원치 않는 곳에서도 이벤트를 받아서 예기치 않는 일을 할 가능성도 있다.sen
Application도 액티비티나 Service와 마찬가지로 ContextWrapper를 상속한다. Application은 단독으로 시작하진 않는다. 앱 프로세스가 떠있지 않은 상태에서 다른 컴포넌트가 실행 요청을 받으면, 앱 프로세스가 생성되고 Application
앱 프로세스는 사용 가능한 메모리에 제한이 있다. 안드로이드 버전별로 메모리 제한에 차이가 있고, 단말별로도 다르다.허니콤부터는 android:largeHeap 옵션을 쓸 수 있지만 단말에 따라 소용이 없거나 GC 시간이 오래 걸리거나 다른 앱의 실행에 악영향을 줄 수
오늘은 코틀린으로 위임하는 방식에 대해 이야기하고자 한다.보통 위임 패턴이라고들 하면 여러 가지로 생각이 들텐데 코틀린 && 안드로이드로 특정 짓고 정리해보겠다!In software engineering, the delegation pattern is an object
Android 앱 설계 방법: 규칙이 아닌 원칙에 대한 심층 분석이 포스팅은 아래 글을 번역하며 이해하기 위해 작성된 글입니다. 자세한 건 아래 링크를 확인하시길!https://proandroiddev.com/how-to-architect-android-app
우리는 안드로이드 앱 개발을 할 때 API를 이용해서 개발하는게 많다. 그러다보면 원하는 Data Response대로 앱이 잘 그려지는지, 구동하는지 테스트가 필요하기 때문에 간혹 Mock data를 mocking하여 쓸때가 있다 이 때 대부분 찰스를 쓸 것이다.출처:
Making timers lifecycle-aware타이머의 수명주기를 인식하도록 만들기아티클 : https://bladecoder.medium.com/strategies-for-automatically-refreshing-data-on-android-usin
Synchronous and Asynchronous runs: run, runCatching, runBlocking and runInterruptible in Kotlin최근에 runBlocking에 관한 비디오를 시청했습니다. runBlocking 동작에 대한 좋은
오늘은 코루틴의 suspend와 blocking에 관해 정리를 해보고자 한다.안드로이드에서 설명한 코루틴을 한 번 같이 살펴보자코루틴은 concurrency design pattern이다.기본 스레드를 차단하며 ANR까지 이끄는 장기 실행 작업을 관리하는데에 용이하다.
안드로이드 프로그래밍 Next Step 11장디자인 패턴은 복잡한 앱을 개발하면서 도움이 된다. 그렇다고 다 적용하려고 하지말고 필요할때에 쓰자.이 챕터에서는 도움될 만한 패턴을 이야기해보자앱에서 싱글톤 패턴은 메모리 누수 가능성을 고려해야하는 패턴이다. 가급적이면 반