Android #4 - Thread

yoondengo·2021년 5월 17일
0

ANDROID

목록 보기
4/4
post-thumbnail

스레드란 무엇인가?

프로그램이 실행되면 그것을 프로세스라고 하는데 이거 안에서 돌아가는 여러 애들이다.
직관적으로 이해하고자 예를들자면
사진 두장이 각각 다른 패턴을 가지고 다른 규칙으로 바뀐다고 쳤을때 이를 스레드를 2개를 사용해서 해결해야 함.

멀티스레딩이란?

싱글 스레딩의 경우 1번에서 6번의 일이 있다고 쳤을때 각각의 일을 1번부터 모두 끝내고 다음 일로 넘어가야한다.
반면에 멀티스레딩은 정확히 말하면 1번 조금 , 2번 조금, ... 6번 조금을 엄-----청나게 빠르게 반복하는 것이다.

이렇게 할 경우에 멀티 스레딩의 방법이 조금 더 오래걸리 겠지만 대신에 1번에서 6번을 마치 동시에 치우고 있는 것같은 모습을 보여줄 수 있다.
이때 현재일에서 다른 일로 넘어가는 것을 context switching이라고 부른다.

문제는 없을까?

유명한 예제로 우유 사오기 이야기가 있다.
3명이 같이 동거를 하며 냉장고에 우유가 비어있으면 그걸 확인한 사람이 우유를 사오는 것으로 약속을 하였다.
하지만 여기에는 문제가 있는데 한명이 우유를 사러 가버리면 다른 사람이 냉장고를 확인했을때 우유가 역시 없기 때문에 또 사러나갈 수 있다는 문제점이 생긴다.
여기서 냉장고가 멀티스레딩을 할때 공동으로 이용하는 자원이라고 생각하면 되는데 이를 해결하기 위한 여러가지 방법론이 존재한다

Thread in Android

안드로이드에서는 메인 ui스레드라는게 기본으로 돌아가고 있다.
이 스레드가 기본적으로 화면에 그려주는 역할을 하기 때문에 스레드를 추가로 생성해서 바인딩을 건드리려고 하면 에러가 난다.
따라서 이때 핸들러라는 것을 이용해야한다.

val handler = Handler(Looper.getMainLooper())
handler.post{
    binding.muziMain.visibility = View.VISIBLE
}

이런식으로 이용하면 된다.

무엇을 만들었나

거지키우기 게임에서 영감을 받은 춘식이 키우기 게임을 만들었다.

우선 날라가는 동전 하나하나가 모두 스레드를 이용하였다.
매초마다 왼쪽 상단의 보유금액이 업데이트 되는데 이를 이용해서 '초당 금액'또한 적용 가능하다.
오른쪽의 클릭당 금액, 초당 금액 또한 업데이트를 해주어야 하는데 여기서 주목해야할 점은 아래에 보이는 메뉴들이 프래그먼트이기 때문에 금액을 증가 시켜도 오른쪽 상단의 값들을 수정하기 위해선 메인 액티비티 바인딩을 이용해야 하기 때문에 바인딩을 이용할 수 없다. 따라서 이것의 업데이트 역시 스레드를 이용해서 0.5초마다 업데이트를 받는식으로 구현 하였다.

profile
Software Engineer (전산쟁이)

0개의 댓글