코린이 탈출기
chapter 9.4 - Handler - postDelayed 본문
chapter 9.4 - Handler - postDelayed
50HEE 2021. 5. 26. 15:00이전 챕터에서 다루었던 핸들러에 대해 자세하게 보겠습니다.
2021.05.26 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 9.3 - Process, Thread, Handler
핸들러를 다시 정의하자면 사용자가 보고 있는 화면인 UI는 계속 동작을 받을 수 있게 유지하면서 다른 작업을 별개의 핸들러를 통해 실행하는 것을 의미합니다.
핸들러의 기능 중 postDelayed 함수에 대해 알아보겠습니다.
postDelayed 함수는 일정 시간이 지나고 나서 실행되도록 지연 처리를 해주는 함수를 의미합니다.
설명을 위해 지난 챕터에서 만들었던 부동산 앱을 예시로 사용하겠습니다.
기존에 만들었던 앱에 로딩 화면을 만들어보겠습니다.
로딩 화면이란 앱을 실행시킬 때 로고가 보이는 화면을 말합니다.
로딩 화면을 새로 만들어 주기 위해 새로운 액티비티를 추가하겠습니다.

액티비티 이름을 SplashActivity로 정하겠습니다.
코드를 작성하는 곳은 activity_splash.xml입니다.
새로 만든 액티비티의 xml에 mipmap에 추가한 이미지를 가운데로 배치하였습니다.

이렇게 만든 화면을 위에서 말한 로딩 화면으로 배치하고 싶습니다.
그렇다는 말은 위 화면을 앱을 켰을 때 가장 먼저 보여주고 싶습니다.
이럴 경우에는 전에 다루었던 Manifest 파일에 가서 수정해주어야 합니다.
2021.05.25 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 9.2 - manifest - 앱 정보사항 관리
코드를 작성하는 곳은 AndroidManifest.xml입니다.
<intent-filter> 중 MAIN과 LAUNCHER가 있는 태그를 새로 만든 액티비티 태그 사이에 넣어주면 됩니다.


위와 같이 수정할 경우 로딩 화면으로 만들었던 화면이 제일 먼저 보입니다.
하지만 위 코드의 경우 앱 화면이 계속 로딩 화면으로만 보이게 됩니다.
이 로딩 화면을 잠시만 보여주고 넘겨주기 위해 postDelayed 함수를 이용해보겠습니다.
코드를 작성하는 곳은 SplashActivity.kt입니다.

우선 핸들러를 변수로 설정하여 핸들러 클래스를 적용해줍니다.
val 변수 명 = Handler()
Handler 클래스를 만들어 주면 아마 위 코드처럼 줄이 그어집니다.
이전에는 이렇게만 사용하여도 문제가 없었지만 오래된 문법이라 사용을 자제해달라는 뜻입니다.
그래서 Handler의 생성자의 재료로 Looper.getMainLooper를 넣어주면 줄이 사라지면서 조금 더 올바른 문법이 됩니다. 14번 줄과 같습니다.
핸들러는 다른 작업을 할 수 있도록 도와주는 역할을 합니다. 여러 종류 중에서 일정 시간이 지나면 다른 작업을 할 수 있도록 도와주는 postDelayer 함수를 이용하겠습니다. 16번 줄과 같습니다.
함수 안에서 실행해줄 내용을 작성하기 위해 { }를 추가하였습니다.
{ } 안의 내용은 일정 시간이 지난 후 메인화면으로 이동하여 지금의 화면을 종료하는 코드를 작성하였습니다.
화면을 이동하는 코드는 21 ~ 22번 줄입니다.
(화면 이동에 관한 자세한 설명은 아래의 글을 참고하세요.)
2021.04.29 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 5.3 - 여러 화면 활용하기 - Intent(화면 전환)
화면을 종료하는 코드는 24번 줄입니다.
마지막으로 일정 시간을 입력해줍니다. 시간의 경우 밀리세컨드, 즉 1/1000 초라고 생각하고 입력해주어야 합니다.
예를 들면 2.5초의 경우 2500입니다.
여기까지 코딩을 하고 에뮬레이터를 실행하면 로딩 화면을 2.5초 동안 띄운 후 메인 화면으로 넘어갑니다.
이러한 함수를 사용하는 이유가 있습니다.
그중 가장 대표적인 것이 위에서 다루었던 SplashActivity입니다.
이는 앱을 사용하는데 필요한 데이터나 세팅 값 등을 확인하고 준비하는데 필요한 시간을 벌기 위해서입니다.
여기서 필요한 데이터란 토큰 서버 조회나 자동 로그인 유효 여부 등과 같은 것들이 있습니다.
이와 반대로 로딩 화면이 너무 빨라서 이동이 부자연스러울 경우 강제로 로고 화면을 일정 시간 보여주고 나서 이동시키는 경우도 있습니다.
<코드 정리>
val 핸들러 변수 = Handler(Looper.getMainLooper) // Handler는 자동 완성해주어야 합니다.
핸들러 변수.postDelayed( {
// 일정 시간 후 실행할 내용
}, 지연시킬 시간 ~ms 단위로)
'인터넷 강의 > 클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기' 카테고리의 다른 글
| chapter 9.6 - sharedPreferences (0) | 2021.06.01 |
|---|---|
| chapter 9.5 - 안드로이드 액티비티의 생명주기 개념 이해 (0) | 2021.06.01 |
| chapter 9.3 - Process, Thread, Handler (0) | 2021.05.26 |
| chapter 9.2 - manifest - 앱 정보사항 관리 (0) | 2021.05.25 |
| chapter 9.1 - mipmap - 앱 아이콘 제작 (0) | 2021.05.25 |