간단하게 Android의 Activity 라이프 사이클에 대해 정리하고 그중 onStart()와 onResume()이 구체적으로 어떤 차이가 있는지 알아보고자 합니다. 또한, Task에 관해서도 간단히 공부해보려고 합니다. 1. Activity LifeCycle 안드로이드를 공부해 봤다면 반드시 한 번쯤 봤을 그림입니다. 바로 Activity 라이프사이클에 대한 그림인데요. 이미 많은 사람들이 잘 알고 있지만, 복습 겸 한번 더 정리해보고자 합니다. onCreate() 액티비티가 생성되는 시점에 실행되며, 전체 생명 주기 동안 한 번만 발생합니다. 보통 OnCreate에서는 XML 파일을 정의하고 setContentView()에 전달하는 대신, 활동 코드에 새로운 View 객체를 생성하고 새로운 View..
최근 면접을 보면서 최신 기술에 대해 공부하기 급급한 나머지, 안드로이드의 기본적인 지식을 놓치고 있다는 것을 알게 되어 이참에 다시 공부해보고자 합니다. manifest에 입력하는 exported가 어떤 역할을 하는지에 대한 질문이었으나, 정확하게 답변하지 못해 알아보도록 하겠습니다. 1. android:exported 란 우선, 공식문서를 확인해 보면 android:exported 속성은 다른 애플리케이션에서 안드로이드 컴포넌트(액티비티, 서비스, 브로드캐스트 리시버)를 실행할 수 있는지에 대한 설정을 하는 역할을 합니다. true인 경우, 모든 앱이 활동에 액세스 할 수 있으며, 정확한 클래스 이름으로 시작할 수 있다. false인 경우, 동일한 애플리케이션, 동일한 사용자 ID를 가진 애플리케이션..
Android 개발을 해봤다면 네트워크 통신을 위해 Retrofit 라이브러리를 사용해 봤을 것입니다. Retrofit은 HTTP API에 대해 직접적인 조작 없이 인터페이스를 사용하여 쉽게 요청을 보낼 수 있고 응답 결과를 자바 오브젝트로 변환해 주는 라이브러리입니다. 기본 Retrofit만으로 응답을 받을 수 있지만, 정확하고 구체적으로 에러를 핸들링하고 싶다면 어떻게 해야 할까요?! 바로 CallAdapter를 적용하여 원하는 형태로 응답을 얻을 수 있습니다. 1. CallAdapter란 Adapts a Call with response type R into the type of T. Instances are created by a factory which is installed into the R..
지난 callbackFlow에 이어서 callback를 coroutine 형태로 받을 수 있는 suspendCoroutine과 suspendCancellableCoroutine에 대해 알아보려고 합니다. 1. suspendCoroutine public suspend inline fun suspendCoroutine( crossinline block: (Continuation) -> Unit): T { } 먼저 suspendCoroutine에 대해 알아보도록 하겠습니다. 내부 코드와 함께 적힌 설명을 살펴보면, block 람다 함수는 Continuation 객체를 인자로 받으며, 비동기 작업이 완료되면 결과를 이 Continutaion 객체를 통해 반환합니다. Continuation 객체는 현재 코루틴 상..
라이브러리나 sdk에서 callback 형태로 받는 API를 Flow로 받고 싶을 땐 어떻게 해야 할까요?! callbackFlow, suspencoroutine 등을 이용하여 Flow로 받을 수 있습니다. 이번에는 callbackFlow에 대해 공부해보려고 합니다. 1. callbackFlow란 public fun callbackFlow(@BuilderInference block: suspend ProducerScope.() -> Unit) : Flow = CallbackFlowBuilder(block) callbackFlow는 callback을 Flow로 변환할 수 있는 Flow Builder입니다. 공식 문서에 따르면, ProducerScope를 통해 빌더 블록의 코드에 전달된 SendChannel..
EditText를 이용할 때 입력 문자에 제한을 두어야 할 때가 있습니다. 한글만 입력이 가능하게 한거나, 특수문자 입력을 막거나 할 때 등등 보통 InputFilter를 사용하여 입력을 막도록 하는데요 최근에 개발하다가 Filter 조건을 잘 걸었지만 이상하게 동작하는 현상이 발견돼서 기록해보려고 합니다!!! 1. InputFilter EditText에서 InputFilter를 사용하여 특정 문자 입력을 제한, 문자열 길이 제한 조건 설정을 할 수 있습니다. fun EditText.filterDigitAndSpecialChar() { this.filters = arrayOf( InputFilter { source, start, end, dest, dstart, dend -> val pattern = "..
때론 디자인에 따라 Toast 위젯 디자인을 커스텀해야 하는 경우가 있습니다. 최근 사이드 프로젝트에서 Jetpack Compose로 Toast 위젯을 커스텀해야 하는 경우가 생겨 이번 기회에 알아보려고 합니다! 1. 기존에 사용한 Toast Message Custom //Toast 위젯 상속 class CustomToast(context: Context) : Toast(context) { } //객체 생성 Toast(context).apply { view = toastLayout setGravity(Gravity.CENTER,0,0) } 기존에는 Toast 위젯를 상속받는 Class를 통해 Customview를 생성하거나, 객체를 생성하여 setView(), setGravitiy() 등 다양한 속성값을..
검색이나 값을 사용자로부터 입력받아야 하는 경우 xml에서는 EditText를 사용해 왔습니다. Compose에서는 TextField라는 것을 사용합니다. TextField는 어떻게 커스텀할 수 있을까요? 1. TextField 먼저, TextField에 대해 간단히 알아보도록 하겠습니다. @Composable fun TextField( value: TextFieldValue, onValueChange: (TextFieldValue) -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, readOnly: Boolean = false, textStyle: TextStyle = LocalTextStyle.current, label: @Compos..
안드로이드 개발을 하다보면 상황에 따라 화면 터치 여부를 파악하거나 이벤트를 추가해야하는 경우가 있는데요! onTouchEvent(), onClick 등 많이 사용해보았지만 내부 구조에까지는 알지 못했던 것 같아 뷰 계층 구조를 통해 터치 이벤트가 흐르는 방식에 대해 정리해보려고 합니다. 1. MotionEvent 간단하게 MotionEvent 종류에 대해 다시 한번 정리 해보도록 하겠습니다. ACTION_DOWN : 손가락 또는 물체가 화면에 처음 접촉할 때 발생하는 이벤트입니다. 이벤트에는 제스처의 초기 시작 위치가 포함됩니다. ACTION_UP : 손가락 또는 물체가 화면에서 떼어질 때 발생하는 이벤트입니다. 제스처의 최종 놓은 위치가 포함됩니다. ACTION_MOVE : ACTION_DOWN과 A..