본문 바로가기

전체 글

(129)
Android 양방향 데이터 바인딩 사용하기 (Two-way DataBinding With LiveData) 이전에 DataBinding에 LiveData를 사용해 데이터가 변경될 때마다 실시간으로 UI에 반영되도록 했습니다. 이번에는 사용자가 입력한 값을 가져와서 처리할 때 유용한 양방향 데이터 바인딩(Two-way DataBinding)을 사용해보겠습니다. 기존에 사용하는 단방향 데이터 바인딩의 경우 다음과 같이 LiveData가 가진 데이터를 사용자에게 보여줄 때 유용했습니다. android:text="@{String.valueOf(myViewModel.countData)}" 하지만 사용자가 입력한 값을 사용하려면 여전히 EditText에서 Text를 가져오는 과정을 직접 작성을 해야 했습니다. EditText에 사용자가 입력한 값을 LiveData가 가지고 있어서 처리가 필요할 때마다 ViewModel에..
DataBinding에 ViewModel, LiveData와 함께 사용하기 지난 LiveData 사용하기에 이어서 DataBinding을 ViewModel, LiveData와 함께 사용해보려고 합니다. 결과물 버튼을 클릭하면 1을 더한 결과를 보여줍니다. 주요 처리 사항 ViewModel을 Databinding에 사용하기 덧셈 결과(LiveData)가 버튼 클릭으로 인해 변경될 때마다 실시간으로 TextView에 반영이 됩니다. MainActivity.kt에서 덧셈 결과(LiveData)를 관찰하는 코드를 명시 안 해도 됩니다. MainActivity.kt ViewModel을 생성한 이후 binding의 변수로 사용합니다. layout에서 ViewModel이 가지고 있는 LiveData, 함수 등을 사용할 수 있습니다. 또한 LiveData를 DataBinding에서 사용할 때..
[안드로이드/Android] LiveData 사용하기 LiveData은 무엇이고 왜 사용할까? LiveData는 Data의 변경을 관찰할 수 있는 Data Holder 클래스입니다. (LiveData is lifecycle aware observable data holder class) lifecycle aware app components인 activities, fragments, or services 들의 생명 주기를 고려합니다.(lifecycle aware) lifecycle aware를 한 특징으로 인해 active 한 생명 주기를 가진 관찰자만(activities, fragments, or services) 업데이트할 수 있습니다. ** Observer (관찰자)란 LiveData가 가지고 있는 데이터 변화를 관찰하는 대상입니다. 데이터가 변할 때..
[안드로이드/Android] ViewModel 사용하기 안드로이드 os 설정이 바뀌면 activity를 다시 만듭니다. 액티비티 생명주기로는 onDestory 이후 onCreate가 실행됩니다. viewmodel은 이런 경우를 대비해 기존에 UI가 가진 데이터를 가지고 있고 onCreate 할 때 다시 보여줄 수 있습니다.. 설정이 바뀌는 경우는 화면 전환 언어 변경 멀티 윈도우 환경으로 변경 키보드 변경 등등이 있습니다. ViewModel을 사용하지 않았을 경우 겪는 불편함 안드로이드 앱 개발자로서 os 설정 바뀌여서 앱이 다시 시작되는 상황을 고려하고 앱을 만들어야 합니다. 예를 들어 앱이 규모가 큰 앱인 경우 구성이 변경될 때마다 2000천 개의 리스트를 불러오는 비동기 호출을(API 호출) 다시 해야 합니다. 시스템 자원이 불필요하게 사용되고, 사용자..
[안드로이드/Android] Databinding 사용하기 Databinding 사용한 예시를 만들기 전에 findViewByid의 작동 방식을 알아보고 가겠습니다. 목차 findViewByid 작동 방식과 문제점 우리가 뷰에 대한 참조를 얻기 위해서 findViewByid() 함수를 사용할 때마다 안드로이드 시스템은 런타임 중에 뷰 구조를(view hierarchy) 살펴보고 원하는 뷰를 찾아내는 작업을 합니다. 규모가 큰 앱의 경우 레이아웃이 많고 수 백개의 뷰가 있을 수 있습니다. 그럼 한 화면을 보여줄 때 안드로이드 시스템은 수 백번 뷰 구조를 보는 작업이 필요합니다. -> 규모가 큰 앱의 경우 안드로이드 시스템에서 뷰를 참조하기 위한 많은 작업이 필요합니다. 적어도 오늘 날의 모바일 폰 시장에서 적어도 60Hz의 화면 재생 빈도(refresh frequ..
android 공식 문서를 영어로 봐야하는 이유 1. 최신 버전에 맞게 내용을 수정해주는 것이 늦습니다. 예시 1 databinding 데이터 결합을 사용하도록 앱을 구성하려면 앱 모듈에서 dataBinding 요소를 build.gradle 파일에 추가해야 합니다. 한글 문서는 다음과 같이 설명해줍니다. 하지만 Android Studio version 4.1 이상 버전에서 다음과 같이 따라하면 밑의 에러가 발생합니다. 한글 문서에서 알려준 방식이 obsolete(쓸모 없는, 구식의)하고 대체될 것이라는 경고 문구를 반환합니다. 영어 문서에는 대체될 방법을 알려줍니다.. 이대로 실행하면 경고 문구가 사라집니다... 영어 공부 해야겠죠?? databinding 공식 문서 :developer.android.com/topic/libraries/data-bin..
[안드로이드] 핸드폰 번호, 기기 고유 id 등 단말기 정보 가져오기 안드로이드 앱 개발하면서 사용자의 핸드폰 번호, 기기 고유 id 등 정보를 많이 필요한데요. (앱 홍보 또는 여러 계정으로 앱에 가입 시 이벤트 제한 등등) 그래서 단말기 정보 가져오는 것을 알아볼 것입니다. ** 참고 Android 11에서는 앱에서 전화번호를 읽을 때 사용하는 전화 관련 권한이 변경됩니다. 앱이 Android 11 이상을 타겟팅하고 다음 목록에 표시된 전화번호 API에 액세스해야 한다면 READ_PHONE_STATE 권한 대신 READ_PHONE_NUMBERS 권한을 요청해야 합니다. TelephonyManager 클래스와 TelecomManager 클래스의 getLine1Number() 메서드 TelephonyManager 클래스에서 지원되지 않는 getMsisdn() 메서드 참고 ..
안드로이드 런타임 퍼미션(runtime permissions) 안드로이드 앱 개발 시 TargetSDK가 마시멜로 버전(APK 23) 이상인 경우, 디바이스의 특정 기능을 사용할 때 권한을 요구하는데 그 권한 중에 위험 권한으로 분류된 권한은 개발자가 직접 사용자에게 권한을 허가받을 수 있게 개발해야 합니다. 위험 권한(카메라, 오디오 녹음 권한) 허가를 받고 사용자가 허가하지 않은 경우 다시 권한 허가 요청을 하도록 하는 앱을 만들어 보겠습니다. 1. 먼저 manifest 파일에 필요한 앱에서 사용할 위험 권한을 선언합니다. 2. java 코드를 통해서 사용자에게 권한을 허가 받겠습니다. 앱이 실행이 됐을 때 chkPermission() 함수를 통해서 모든 위험 권한을 허가받았을 경우 토스트 메시지를 띄우도록 했습니다. @Override protected void..