전체 글

공부, 일상
Android

Codelab으로 LiveData 알아보기 - 5. Add a game-finished event(2)

저번 글에서 문제는 토스트 메시지가 프래그먼트가 기기 회전 등의 이유로 재생성될 때마다 다시 보이는 것이었다. 바로 본론으로 들어가보자. Reset the game-finished event 보통, LiveData는 데이터 변경이 있을 때만 업데이트를 옵저버에게 전달한다. 이 행동의 예외 사항은 옵저버가 비활성 상태에서 활성 상태로 변경될 때도 업데이트를 수신한다는 것이다. 이것이 게임 종료에 대한 토스트가 반복적으로 발생하는 이유이다. 화면 회전 이후 GameFragment가 재생성되면 비활성에서 활성 상태로 변경되고, 옵저버는 기존 ViewModel에 다시 연결된다. 그리고, 데이터를 수신한다. 그럼 gameFinished 메소드가 다시 호출되고, 토스트가 표시된다. GameViewModel안의 ev..

Android

Codelab으로 LiveData 알아보기 - 4. Add a game-finished event(1)

현재 우리가 수정한 앱은 'End Game' 버튼을 누르면 점수 화면으로 넘어간다. 우리는 플레이어가 모든 단어를 거치고나면 점수 화면으로 이동하기를 원한다. 플레이어가 마지막 단어를 끝내면 게임이 자동으로 끝나서 버튼을 누를 필요가 없도록 만들고 싶다. 이 기능을 구현하기 위해 우리는 이벤트가 발생되어야 하고 ViewModel에서 모든 단어가 보여졌을 때 프래그먼트에 전달되어야 한다. 이를 위해서는 LiveData 옵저버 패턴을 적용해야 한다. Observer pattern은 observable(Subject)과 observer 사이의 통신을 정의한다. 이 앱의 LiveData의 경우, 위 그림의 Subject는 LiveData 객체이다. 그리고, Observer들은 프래그먼트와 같은 UI contro..

Android

종종 간과하는 문제 해결 에피소드(feat. Handler, Thread)

오늘은 회사에서 마주한 에러를 해결했던 에피소드를 적어보고자 한다. 사실, 되게 사소하지만 크리티컬한 문제였다. 가장 먼저 오늘 마주한 에러를 다시 재현하기 위해 내 노트북에서 샘플앱을 만들었다 ㅋㅋㅋㅋㅋ 마주한 에러 로그를 첨부하겠다. java.lang.RuntimeException: Can't create handler inside thread Thread[Timer-0,5,main] that has not called Looper.prepare() at android.os.Handler.(Handler.java:227) at android.os.Handler.(Handler.java:129) at android.app.Dialog.(Dialog.java:138) at android.app.Dialo..

BonusTrack02.dev
BonusTrack02.dev