본문 바로가기

Android

(43)
[Android: Jetpack] ViewModel & Lifecycle 기초(2) 앱이 강제 종료 될 경우 대비 바로 앱이 강제 종료 될 경우의 대비 방법을 알아보겠다. 여담으로, 메모리 부족 등의 이유로 시스템이 앱을 강제종료할 겨ㅇ우에는 뷰모델은 데이터를 유지할 수 없다. savedStateHandle 사용 이 방법은 앞전 글에도 설명했지만, RAM에 데이터를 저장하기 때문에 많은 데이터를 저장할 수는 없다. 하지만 시스템에 의한 강제종료에도 데이터를 유지할 수 있다. https://developer.android.com/topic/libraries/architecture/saving-states#onsaveinstancestate 이 방법은 거의 모든 코틀린 데이터 타입을 저장할 수 있다. 또, saveState에는 Key:Value 형태로 값을 저장한다.(Map이요) 자 그럼,..
[Android: Jetpack] ViewModel & Lifecycle 기초(1) ViewModel에 대해 정확히 알고 넘어가기 위해서는 먼저, Lifecycle에 대해 알아야한다. Activity의 생명주기는 예전에 정리해둔 자료를 보도록 하자. ViewModel을 사용하면 좋은 이유를 가장 와닿기 쉽게 떠올린다면, 화면을 회전시키는 상황을 떠올리면 된다. 화면을 회전하게 되면, 화면의 구성이 바꿔면서 그에 맞게 View를 재생성 해야한다. 파괴된 View를 다시 생성할 때, 액티비티가 보유 중이던 데이터가 사라지게 된다. 화면 전환 시, onDestroy()가 호출되고, 다시 onCreate가 실행되며 값이 초기화 되는 것이다. 이에 대한 해결 방법으로는 onSavedInstanceState가 있다. 이는 액티비티를 재생산 할 때 사라져버리는 휘발성 데이터를 메모리에 보존했다가 꺼..
[Android: Jetpack] 안드로이드 AAC(Android Architecture Components) 간략한 정리 어차피 글을 쓰는 현재가 이것들을 중점적으로 공부하는 시점이기 때문에, 한번 간략하게 정리해 놓고 세부적인 내용을 개별적으로 문서화 하려고 한다. AAC란? AAC(Aandroid Architecture Pattern)란 2017년 구글I/O에서 발표한 개발자의 편의를 돕기위한 6개의 라이브러리로 구성은 다음과 같다. Lifecycles(Easy handling lifecycles) LiveData(Lifecycle aware observable) ViewModel(Managing data in a lifecycle) Room(Object Mapping for SQLite) Paging(Gradually loading infomation) DataBinding Navigation WorkManager 이..
[Android: Jetpack] ViewBinding 기초 ✍🏼 ViewBinding의 필요성 기존에는 뷰의 요소를 불러오기 위해서 findViewById를 사용한다. kotlin-android-extensions를 사용하면 findViewById를 생략하고 간편하게 쓸 수 있다. 문제는 서로 다른 xml에서 id를 동일하게 사용할 수 있기 때문에, koltin-android-extensions를 통하면 코드가 꼬일 수 있다. 이에 대한 해결방안으로, 구글에서는 안드로이드 스튜디오 4.1부터 koltin-android-extentions의 지원을 중단하고 뷰 바인딩을 사용하도록 안내하고 있다. ✍🏼 ViewBinding이란? ViewBinding을 활성화하면 각 xml파일에 대해 ViewBinding클래스를 상속받는 개별 뷰 바인딩 클래스가 자동으로 생성된다. ..
Fragment Lifecycle 예제 Fragment 소스파일은 진짜 별거 없어서 위의 Github링크로 대체한다. 생성-정지-파괴 순서로 모두 진행해보았다. 앱을 실행하자마자 위의 로그 스크린샷에서 보는 것 처럼, 액티비티의 onCreate()가 호출되었고, 이어서 프래그먼트의 onAttach()→onCreate()→onCreatView()→onViewCreate()→onViewStateRestore()→onStart()가 차례로 진행된다. 그런데 여기서 눈여겨 볼 점은 바로, 프래그먼트의 onStart() 호출 이후, 액티비티의 onStart()와 onResume()이 호출되며, 그 이후에 다시 프래그먼트의 onResume()이 호출된다는 것이다. 액티비티를 생성한 다음 프래그먼트를 진행하고, 액티비티를 Forground로 보낸 다음(실..
Fragment와 Fragment 생명주기Fragment란? 📚 Fragment는 FragmentActivity내의 어떤 동작 또는 사용자 인터페이스의 일부를 나타낸다. Fragment는 자체적인 수명주기(Lifecycle)를 가지며 자체 입력 이벤트를 수신하고, 액티비티 실행 중에 추가 및 삭제가 가능하다. 다른 액티비티에서 재사용할 수 있는 “하위 액티비티”와 같은 개념이다. Fragment를 사용하는 이유 개발자가 뷰 계층에 복잡한 변경 내용을 관리하지 않아도 태블릿과 같은 큰 화면에서 역동적이고 유연한 UI디자인을 구현할 수 있다. 액티비티의 레이아웃을 여러 Fragment로 나누면 런타임에서 액티비티의 외관을 수정할 수 있다. 액티비티의 변경 내용을 액티비티가 관리하는 백 스택에 보존할 수 있다. 하나의 Fragment를 여러 액티비티에 포함할 수 있다...
액티비티(Activity) 📚 액티비티(Activity) 액티비티(Activity)는 사용자 인터페이스(UI) 화면을 관리하는 컴포넌트다. 액티비티 역할을 하기 위해서는 AppCompatActivity()를 상속해야 하며, AppCompatActivity가 기본적으로 가지고 있는 생명주기 메소드를 재정의해서 원하는 기능을 구현해야 한다. 💡 Java 안드로이드의 경우, public class MainActivity extends Activity의 형태로 Activity 클래스를 상속해준다. 근데, Kotlin이라고 다른건 아니다. AppCompatActivity()는 Activity의 자식이기 때문. class MainActivity : AppCompatActivity() { override fun onCreate(savedIns..
안드로이드 구성요소 📚 안드로이드 구성 요소 안드로이드 주요 용어 정리 구성요소 설명 Activity 액티비티 사용자 인터페이스 화면을 구성하는 컴포넌트 Service 서비스 백그라운드에서 실행되는 컴포넌트. 시각적인 사용자 인터페이스를 가지지 않는다. Intent 인텐트 컴포넌트에 액션, 데이터 등을 전달하는 메시지 컴포넌트 Intent Filter 인텐트 필터 수신할 수 있는 인텐트를 정의하여 컴포넌트를 정의하는 역할을 하는 컴포넌트 Broadcast Receiver 브로드캐스트 리시버 배터리 부족, 언어 설정 변경 등의 특정 브로드캐스트를 수신하거나 반응하는 컴포넌트. 시각적인 사용자 인터페이스를 가지지는 않는다. Content Provider 콘텐트 프로바이더 애플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스..