본문 바로가기

안드로이드

(26)
Android Compose 튜토리얼 1 Jetpack Compose는 네이티브 UI를 빌드하기 위한 Android의 최신 도구 키트입니다. Jetpack Compose는 Android에서 UI 개발을 간소화, 가속화 합니다. Lesson 1: Composeable functions Jetpack Compose는 구성 가능한 함수로 이뤄져 있습니다. 이러한 함수들은 UI 프로세스의 초기화, 상위 요소에 붙이는 것에 초점을 맞추기 보다는 앱의 모양을 설명하고 데이터 종속성을 제공하는 방식으로 앱 UI를 제공할 수 있습니다. Compose 함수를 만들기 위해 단순히 @Composable 어노테이션만 추가하면 됩니다. Add a text element 시작하기 앞서 안드로이드 스튜디오를 최신 버전으로 다운로드 해주시고, Empty Compose Ac..
서비스 서비스는 UI를 제공하지 않고 백그라운드에서 실행되는 컴포넌트이다. 서비스 자체가 메인스레드가 아닌 별도 스레드에서 실행하는 것으로 착각하면 안된다. 서비스에서 UI를 블로킹하는 작업이 있다면 백그라운드 스레드를 생성해 작업을 진행해야 한다. 서비스는 단일 인스턴스로 실행된다. 그렇기 때문에 일부러 싱글톤으로 만들 필요는 없다. 서비스 시작 방법 startService() 와 bindService() 메서드 두가지가 있다. 스타티드 & 바운드 서비스 서비스는 보통 스타티드 서비스 or 바운드 서비스로 존재하는데, 스터디드이면서 바운드일 수 있다. 이는 코드도 복잡하고 고려해야할 것이 두 배 이상이 되기 때문에 피하는 게 좋지만 어쩔 수 없이 사용해야 하는 경우가 있다. 예를 들어, 음악 재생화면이 있을 ..
Android에서 Context란? (What is Context in Android) 콘텍스란 애플리케이션 리소스와 클래스를 접근하기 위한 인터페이스를 제공하는 abstract class입니다. 위 그림을 보면, 애플리케이션과 서비스의 콘텍스트는 ContextThemeWrapper 클래스를 상속받지 않기 때문에 애플리케이션의 테마에 접근이 불가하여 기본테마로 보여지게 됩니다. 콘텍스트를 사용할 때는 메모리릭에 주의하기 위해서 각 context의 생명주기를 파악하고 사용해야 합니다. 특히 코틀린의 object 등의 정적클래스에서 사용을 주의해야 합니다. class MainActivity: Activity() { companion object { lateinit var mTextView: TextView } override fun onCreate(savedInstanceState: Bundl..
안드로이드 태스크 ( Android Tasks) 태스크란? (What is Task?) 태스크는 액티비티 작업 묶음 단위라고 보면 됩니다. 앱과 태스크는 1:1 대응이 아닙니다. 여러 개의 앱이 하나의 태스크가 될 수도 있고, 필요하면 하나의 앱에서도 태스크를 여러개 가질 수 있습니다. A task is a collection of activities that users interact with when tying to do something in your app. Mutliple apps can be one task, and one app can have multiple tasks if necessary. 백스택 (Back Stack) 액티비티는 백 스택(back stack)이라 불리는 스택에 차례대로 쌓인다. Intent.FLAG_ACTIVITY_..
프래그먼트 간 데이터 전달 (Fragment Result API) 프래그먼트간 데이터 전달 방법엔 여러가지 방법이 있습니다. 1. bundle과 FragmentManager로 전달 2. Fragment Result API를 이용하여 전달 3. Fragment간 shared ViewModel로 전달 4. Jetpack의 Navigation 에서 제공하는 safe-args로 전달 오늘은 Fragment Result API를 이용하여 전달하는 방법에 대하여 기술하겠습니다. 해당 API를 사용하기 위해서는 build.gradle에 아래와 같이 설정합니다. dependencies { def fragment_version = "1.4.1" //1.3.0-alpha04 이상 // Kotlin implementation "androidx.fragment:fragment-ktx:$fr..
안드로이드 프로젝트의 리뷰어들의 체크리스트 Memory Leaks - context를 유지하는 코드 조각이 있는지? - RxAndroid Code랑 연관이 있따면 RxCall이 생명주기의 끝에 없어지는지? - coroutine을 사용하고 있다면, Jab이 런취되고 viewModel 스코프에 의해 적절히 해방이 되는지? - 만일 CountDownTimer나 AsyncTask를 비디오/오디오 플레이어에서 사용하고 있다면, momory 리소스를 적절히 해방시키는지? - ViewBinding을 사용하고 있다면 onDestroyView에서 null로 셋팅시키는지 Resource Annotations fun showMessage(context: Context, val idRes: Int) { Toast.makeText(context, idRes, Toast..
Context 클래스 Context 클래스로 가능한 것 - 액티비티 시작 - 브로드캐스트 발생 - 서비스 시작 - 리소스 접근 Context 하위 클래스 Contex 는 추상클래스인데 메서드 구현이 거의 없이 상수 정의와 추상 메서드로 이루어진다. - ContextWrapper (직접 상속) - Activity - Service - Application ContextImpl ContextImpl은 앱에서 싱글톤으로 단 1개의 인스턴스만 갖고 있지 않다! ContextWrapper에 getBaseContext()는 각각 getApplicationContext()라는 2개의 메서드가 별도이다. getBaseContext()는 각각 ContextImpl 인스턴스를 리턴한다. getApplicationContext()는 Applic..
AsyncTask Deprecated 가 되어버렸지만 AsyncTask에 대해서 공부하고 정리하도록 하겠습니다. AsyncTask는 백그라운드 스레드와 UI 스레드에서 작업할 수 있도록 만들어진 것입니다. doInBackground, onPostExecute 두 가지 함수를 이용해서요. AsyncTask는 제네릭 크래스고, Params, Progress, Result 가 있다. AsyncTask 취소 cancel() 메서드가 있다. mCanceld 변수를 true로 만들고, 스레드 작업 이후에 onPostExecute() 대신 onCancelled() 메서드가 불린다. isCancelled() 리턴값을 doInBackground() 곳곳에서 체크하고, AsyncTask를 멤버 변수로 유지하고서 Activity의 onDes..