IT/안드로이드(37)
-
Android - ViewModel 과 LiveData 사용하기
LiveData는, 수명 주기를 인식하는 관찰 가능한 데이터 홀더 클래스이다. (?!?!?! ㅠㅠ) LiveData는, LiveData는 Data를 보유한다. LiveData는 모든 유형의 데이터에서 사용할 수 있는 래퍼이다. LiveData는 관찰이 가능하다. 즉, LiveData 객체에서 보유한 데이터가 변경되면, 관찰자에 알림이 제공된다. LiveData는 수명 주기를 인식한다. Livedata에 관찰자를 연결하면 관찰자는, LifeCycleOwner ( Activity 또는 Fragment) 와 연결된다. LiveData 는 STARTED 또는 RESUMED 같은 활성 수명 주기 상태인 관찰자만 업데이트한다. MutableLiveData 는, 변경 가능한 버전의 LiveData 이다. 즉, 내부에..
2022.05.04 -
Android - App architecture (1)
아키텍처는 앱에서 Class간의 책임을 할당하는 가이드라인을 제공한다. App architecture 가 잘되어있으면, 향후 App을 확장하고 더 많은 기능을 포함 할 수 있다. 가장 일반적인 아키텍처 원칙은 , 분리, 모델에서 UI만들기 이다. 분리 디자인 원칙 - 각각 별개의 책임이 있는 여러 클래스로 App을 나눠야 한다는 원칙이다. Model 에서 UI 만들기 - Model 은 App의 데이터 처리를 담당하는 구성 요소로, App의 View 객체 및 App 구성요소와 독립되어 있으므로, App의 수명 주기 및 관련 문제의 영향을 받지 않는다. 또한 Arcitecture 의 기본 Class 또는 구성 요소는, UI 컨트롤러 (Activity, Fragment) , ViewModel , LiveDat..
2022.05.02 -
onSaveInstanceState() 가 동작을 안한다?
간단하게 화면 전환시에, override fun onSaveInstanceState() 함수를 타는걸 보고싶었는데, Ctrl + O 로 onSaveInstanceState() 함수를 추가해서 확인을 했는데, 거기를 안타는거다. override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) { super.onSaveInstanceState(outState, outPersistentState) Log.d(TAG, "!!!! onSaveInstanceState Called !!!!") } 그래서 아래와 같이 수정했다. override fun onSaveInstanceState(outState: Bundle) { ..
2022.04.28 -
Android - 데이터 손실시 onSaveInstanceState() 사용
기기 방향을 회전시, 새 방향에 맞게 Layout 을 변경해야 할 수 있다. 이러한 시나리오에서 앱의 동작을 살펴보자. 그러면 , 시스템은 모든 주기 콜백을 호출해 활동을 종료한다. 그담에 다시 모든 주기 콜백을 호출해 활동을 시작한다. 그래서 사용하는 값들이 모두 초기화 될수가 있다. 이럴때 onSaveInstanceState() 를 사용해 번들 데이터를 저장해보자. onSaveInstanceState() 메서드는, Activity가 소멸되면 필요할 수 있는 데이터를 저장하는데 사용하는 콜백이다. 수명 주기 콜백 다이어그램에서 onSaveInstanceState()는 활동이 중지된 후 호출 된다. 또한 앱이 백그라운드로 전환 될 때마다 호출된다. 미리 추가했던 onStop() 처럼 override 함수..
2022.04.27 -
Android - 수명 주기 사용 사례
수명 주기 사용 사례 Activity는, 코드상에서 수동으로 finish() 메서드를 호출하거나, 사용자가 앱을 강종하는 경우에도 완전히 종료 될 수 있다. Android System은 앱이 오랫동안 화면에 표시되지 않으면 자체적으로 종료할 수도 있다. Android는 배터리를 보존하고, 앱의 리소스를 다른 앱에서 사용할 수 있도록 이 작업을 실행한다. 이전 단계에서 Activity가 소멸되었으므로, (onDestroy) 앱으로 돌아가면 안드로이드는 새 활동을 시작하고, onCreate, onStart, onResume을 호출한다. 이전 활동의 로그가 유지되지 않은것이다. 그렇다면 , 홈 화면으로 돌아갔을때 앱이 백그라운드에 있을때는 어떤 순서로 될까? (뒤로 버튼을 눌러 종료하지 않는경우) App을 켰..
2022.04.27 -
Android - 수명 주기
Android의 기초인 활동 에 관해 자세히 알아보자. 활동 수명 주기는, 전체 기간중 activity상태를 의미한다. 수명 주기는 , 활동이 생성되는 시점에 시작 ~ 활동이 소멸되어 리소스가 회수될 때 까지이다. 활동이 수명 주기 상태 변경에 올바르게 응답하지 않으면 버그가 발생해 동작을 혼동하거나, App에서 리소스를 너무 많이 사용 할 수 있다. App의 수명 주기를 파악하고, 수명 주기 상태 변경에 올바르게 응답하도록 해야한다. ## 기본요건 > Activity의 정의, App에서 Activity 를 만드는 방법을 알아야한다. > onCreate() Method 기능과, 이 메서드에서 실행되는 작업의 종류를 알아야한다. ## 학습 내용 > Logging 정보를 Logcat에 출력하는 방법. > A..
2022.04.27 -
Android - RecyclerView
RecyclerView는 데이터 목록을 표시하는데 사용된다. 어떤 Contents이던 상관없이, 데이터 목록을 표시하는 것은 Android에서 가장 일반적인 UI 작업 중 하나이다. Android는 목록이 있는 App을 빌드 할 수 있도록 RecyclerView를 제공한다. 스크롤 뷰를 재사용/재활용 해서 목록이 긴(큰)경우에도 효율적으로 작동하도록 설계되었다. 아래의 다이어그램에서 RecyclerView 의 각 부분을 살펴보자. item - 표시할 목록의 단일 데이터 항목. 객채 하나를 나타낸다. Adapter - RecyclerView에서 표시할 수 있도록 데이터를 가져와 준비한다. ViewHolder - 확인을 표시하기 위해 사용하거나, 재사용 할 RecyclerView용 뷰의 풀. Recycler..
2022.04.20 -
Kotlin - List, MutableList
Kotlin 의 목록 유형에는 크게 두가지가 있다. List - List는 만든 후 수정 불가. MutableList - 만든 후 수정 가능. 요소를 추가, 삭제, 업데이트 할 수 있다. List() List는 여느 언어와 같이 Elemts 와 Index 가 아래와 같이 구성되어있다. 값을 확인하고싶으면 아래와 같이 값을 불러온다. println("First element: ${numbers[0]}") println("Last index: ${numbers.size - 1}") println("Last element: ${numbers[numbers.size - 1]}") println("First: ${numbers.first()}") println("Last: ${numbers.last()}") 맨 ..
2022.04.20 -
Android - Material Design page
세련된 UI 디자인을 만들기 위해서는 아래 페이지가 도움이 될듯 하다 ! https://material.io/develop/android/docs/getting-started Material Design Build beautiful, usable products faster. Material Design is an adaptable system—backed by open-source code—that helps teams build high quality digital experiences. material.io 아래는 About Color System https://material.io/design/color/the-color-system.html#color-theme-creation Material ..
2022.04.19 -
Kotlin의 클래스 및 상속 - 3
이번에는 2에 이어서, getRoom() 함수를 사용하여 새 거주자가 방을 갖도록 하는 기능을 추가한다. 이 로직은 모든 주택에 동일하므로 Dwelling (SuperClass) 에서 함수를 구현할 수 있고, 이를 통해 모든 서브클래스와 그 하위 요소에서 함수를 사용할 수 있도록 한다. 최상위 Class 인 Dwelling 에 , getRoom() 함수를 추가한다. capa가 residents보다 많으면, residents를 +1 한다. abstract class Dwelling(private var residents: Int) { abstract val buildingMaterial: String abstract val capacity: Int fun hasRoom(): Boolean { return ..
2022.04.18