screen on 및 lock screen 위에 화면 표출 FLAG_TURN_SCREEN_ON flag는 화면이 꺼져있는 동안에는 Activity가 STARTED 에서 STOPPED 로 전환된다. 따라서 이를 방지하기 위해 API27부터는 setTurnScreenOn 메소드를 이용한다. 아래의 그림은 적용된 코드와 activity의 lifecycle을 출력한 내용이다. FLAG_TURN_SCREEN_ON flag를 적용한 부분의 lifecycle을 확인해보면 activity의 lifecycle이 onStart -> onStop으로 전환된 것을 확인할 수 있다. [API 27 이전버전에서 사용하는 방법] - 코드 - activity lifecycle [API 27에서 추가된 메소드 적용] - 코드 - ac..
API 27 : setTurnScreenOn [문제] setTurnScreenOn을 onCreate에서 호출했지만 켜지지 않음 [해결 방법] requestDismissKeyguard도 호출해줘야 함 [이유] setTurnScreenOn(boolean) developer.android.com/reference/android/app/Activity#setTurnScreenOn(boolean) Activity가 resumed일 때, screen의 켜짐 여부를 결정한다. 일반적으로 activity 상태는 screen이 꺼져있는 동안 started에서 stopped으로 전환된다. 그러나 setTurnScreenOn을 설정하면 activity가 visible 및 resumed 되면서 screen이 켜지게 된다. s..
상황 : ExtendedFloatingActionButton 을 적용하려고 하니, 다음과 같은 에러가 발생하였다. 발생 원인 : ExtendedFloatingActionButton은 MaterialComponent의 구성요소에 포함된다. 그렇기 때문에, ExtendedFloatingActionButton을 사용하려면, Theme 또한 MaterialComponent에서 가져와야 한다. 그런데 내가 적용하고 있는 Theme는 AppCompact 이면서, MaterialComponent에 있는 요소를 사용하려니깐 안되는 것이었다. 해결방법 : Theme.AppCompat ->Theme.MaterialComponents 로 변경한다. * Material Design을 적용하기 위한 사이트 material.io..
객체에 대한 바인딩을 찾아본 이유 : databinding을 적용중에 있다. 그런데 xml 에서 ViewModel의 객체를 바인딩했는데, 객체의 내부 값이 변경되었음에도 불구하고 화면에 적용되지 않았다. 그래서 한참을 찾아보던 중에 객체에 대한 바인딩의 경우, 내부 값이 변경됨을 자동으로 알 수 없다는 것이었다. 따라서 따로 해당 객체 내의 특정 필드 값이 변경되었을 때, 변경됨을 직접 알려줘야 한다. https://developer.android.com/topic/libraries/data-binding/observability?hl=ko#observable_objects 식별 가능한 데이터 객체 작업 | Android 개발자 | Android Developers 식별 가능성은 객체가 데이터 변경에 관..
참조 https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150 LiveData with SnackBar, Navigation and other events (the SingleLiveEvent case) A convenient way for a view (activity or fragment) to communicate with a ViewModel is to use LiveData observables. The view subscribes to… medium.com https://proandroiddev.com/singleliveeven..
android jetpack의 data binding을 RecyclerView에 적용하는데 문제가 발생 data binding을 통해 생성된 layout의 binding 클래스의 Impl 클래스를 찾을 수 없다는 에러가 발생했다. 해당 문제를 해결하기 위한 방법에 대해 이것 저것 찾아 본 결과 1. rebuild, clean project 해라 -> 즉, cache 로 인해 변경사항을 적용하지 않고 실행되는 문제가 있으니 삭제하고 다시 실행하라고 한다. 그러나 나는 이문제가 아니었다. 2. build.gradle(app)에서 databinding 을 true로 설정해라 -> 이거는... 애초에 data binding을 적용하기 위한 설정이므로 나랑은 상관 없었다. 3. data binding을 적용할 l..
LiveData를 잘 사용하고 싶어서 영상을 보고 정리해봤다. 영상보고 나름대로 이래하고 정리한 내용이므로... 정확한 내용은 영상 확인 ㄱㄱ !! # livedata 에 대한 google I/O 컨퍼런스 영상 - Fun with LiveData(Android Dev Summit '18) https://www.youtube.com/watch?v=2rO4r-JOQtA [ LiveData 특징 ] - Simple - Lifecycle-Aware LiveData is Lifecycle-Aware LiveData는 각 컴포넌트의 Lifecycle을 알고 있기 때문에 관찰자의 상태에 따라 data의 전달여부를 결정한다. 데이터의 값은 유지하면서 lifecycle의 상태에 따라 데이터 전달여부만 달라지기 때문에, ..