본문 바로가기

전체 글

(62)
Compose: 튜토리얼 2 Lesson 3 : 머티리얼 디자인 Compose는 머티리얼 디자인 원칙을 지원하도록 빌드되었습니다. Compose의 많은 UI 요소가 머티리얼 디자인을 즉시 사용 가능하도록 구현합니다. 이 강의에서는 머티리얼 위젯으로 앱 스타일을 지정합니다. /values/themes.xml 에 정의되어 있는 테마 (머티리얼을 parent)를 가져와서 사용하면 됩니다. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ComposeTestAppTheme { MessageCard(Message("Android", "Jetpack Compose")) } } } @Preview @Composab..
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..
코틀린 Flows의 소개 Flow는 코틀린 언어에 있는 것으로 특정시간에 걸쳐 여러 값을 순차적으로 방출하는 특징이 있는 것입니다. 예를 들면 Flow를 사용하여 API에 최신 업데이트를 가져와 Flow 연산자로 수정할 수 있습니다. Flow에 대해 설명하기 전에 Hot/Cold stream에 대해서 짚어보겠습니다. HotStream은 수신자가 없어도 데이터를 전송합니다. 반해 ColdStream은 수신자가 있을 때만 전송합니다. 예를 들어 Channels은 HotStream 입니다. HotStream은 매번 data flow 가 있기 때문에 수신자를 제어해야합니다. 데이터 손실 혹은 메모리 누수를 일으킬 수 있기 때문입니다. 반면 ColdStream은 요청할 때만 수집을 시작합니다. kotlin의 flow는 코틀린의 Corou..
서비스 서비스는 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..
보기 좋은 방법으로 Multiple Coroutine 기다리기 val downloadBooksJob = launch { downloadBooks() } val downloadMoviesJob = launch { downloadMovies() } val downloadSongsJob = launch { downloadSongs() } downloadBooksJob.join() downloadMoviesJob.join() downloadSongsJob.join() // this line will not run until ALL of the downloads complete 위 방식을 이용하는 것 보다 Collection.joinAll 을 이용하는게 더 보기 좋아진다. val downloadJobs = listOf( launch { downloadBooks() }, la..