#1 WorkManager๋ '์ง์ฐ ๊ฐ๋ฅํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ '์ ๊ด๋ฆฌ์
WorkManager๋ฅผ ์ฌ์ฉํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ - Kotlin | Android Developers
Android์๋ ๋ณด์ฅ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ํ ๋ค์์ ์ต์ ์ด ์์ผ๋ฉฐ, ์ด๋ฌํ ์ต์ ์๋ ๊ฐ๊ฐ ๋ค์ํ ์ฅ๋จ์ ์ด ์์ต๋๋ค. Android์ฉ WorkManager API๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๊ฐํธํ๊ฒ ๋ง๋ญ๋๋ค. WorkManager๋ ์
developer.android.com
WorkManager๋ Android Jetpack์ ์ํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
๊ด๋ฆฌ ์์คํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ๋ชจ๋ ๋ฐฑ๊ทธ๋ผ์ด๋๋ ์๋๊ณ , '์ง์ฐ ๊ฐ๋ฅํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
'๋ฅผ ๊ด๋ฆฌํ๋ค. '์ง์ฐ ๊ฐ๋ฅํ ์์
'์ด๋, ์ฆ์ ์คํํ์ง ์์๋ ๋๋ ์์
์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, ์๋ฒ์์ ๋ฐ์ดํฐ ๋๊ธฐํ, ์ฑ ์ฌ์ฉ ๋ก๊ทธ๋ฅผ ์๋ฒ์ ์ ์กํ๊ธฐ, ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์
ํ๊ธฐ ๋ฑ์ ์์
์ ๋ถ๋ช
ํ์๋ ํ์ง๋ง ๋น์ฅ ์๋ฃ๋ฅผ ๊ธฐ๋ํ์ง ์์๋ ๋๋ ๊ฒ๋ค์ด๋ค.
์ง์ฐ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, WorkManager๋ ๊ฐ์ฉํ ์์์ด ์ถฉ๋ถํ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์คํ๋๋ค. ์๋ฅผ ๋ค์ด, ์ค๋งํธํฐ์ RAM์ด๋ CPU์ ์ด์ฉ๋ฅ ์ด ์ถฉ๋ถํ ๋ฎ์ ๋, ๋ฐฐํฐ๋ฆฌ๊ฐ ์ถฉ๋ถํ ๋ง์ ๋, ์ถฉ๋ถํ ๋น ๋ฅธ ์๋์ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ด์์ ๋ ๋ฑ์ด ๊ทธ ์์ ์ด๋ค.
๋ ์ง์ฐ์ด ๊ฐ๋ฅํด์ผ๋ง ํ๊ธฐ์, ์ฌ์ฉ์๊ฐ ์ฑ์์ ๋ฒ์ด๋๊ฑฐ๋ ์ฑ์ ๊ฐ์ ์ข
๋ฃ์์ผ๋ ์ฌ์ง์ด ์ค๋งํธํฐ์ด ์ฌ๋ถํ
๋๋๋ผ๋ WorkManager๋ ๋ฐ๋์ ์ด์์์์ด ๋ณด์ฅ๋๋ค. WorkManager๋ Android ์ด์์ฒด์ ์ Application Framework ์์ค์์ ์๋๋๊ธฐ์ ์ด๋ฌํ ๋ณด์ฅ์ด ๊ฐ๋ฅํ๋ค.
#2 ์ด์ ์์คํ ๊ณผ์ ๋น๊ต
WorkManager ์ถ๋ฒ ์ ์ Firebase JobDispatcher, JobScheduler, AlarmManager, BroadcastReceiver๋ฅผ ์ฌ์ฉํด WorkManager์ ์ญํ ์ ์ํํ์๋ค๊ณ ํ๋ค. ์ด์ ์์คํ
๋ค์ ์ํํ ์์
์ ์์ฝ ๊ณผ์ ์ด ๋ณต์กํ๊ณ ๋ง์ ์๊ตฌ ์ฌํญ๋ค์ ๋ช
์์ ์ผ๋ก ์ฒ๋ฆฌํด์ฃผ์ด์ผํ๋ค๊ณ ํ๋ค. ๋ฐ๋ฉด, WorkManager๋ Jetpack์ ์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ๊ฐํธํ๊ณ ์ง๊ด์ ์ธ ์ฌ์ฉ์ฑ์ ๋ค์ํ Android ๋ฒ์ ๊ณผ์ ํธํ์ฑ๋ ๊ฐ์ท๋ค. ์์
์ WorkManager์ ์์ฝํด๋์ผ๋ฉด ์์์ ์ต์ ์ ๋ฐฉ์์ผ๋ก ์์
์ ์ํํ๊ณ , ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ํํ๊ธฐ ์ํ ์ฌ๋ฌ ์ ์ฝ๋ค๋ ์๋์ผ๋ก ์ฒ๋ฆฌํด ๋ช
์์ ์ผ๋ก ๊ด๋ฆฌํ ์ฌ์ง๊ฐ ์ ๋ค.
๊ทธ๋ ๋ค๊ณ WorkManager๊ฐ ์ด์ ์์คํ
๋ค๊ณผ ์์ ํ ๋
๋ฆฝ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ ๊ฒ์ ์๋๋ค. ๋ฐ๋๋ก ์คํ๋ ค ๊น์ ์ฐ๊ด์ด ์๋ค. WorkManager์ ๋ด๋ถ ๋์์ ์ดํด๋ณด๋ฉด, API ๋ ๋ฒจ 23 ๋ฏธ๋ง์ BroadcastReceiver์ AlarmManager์ ์กฐํฉ, API 23 ์ด์์ JobScheduler, Firebase๋ฅผ ์ฌ์ฉํ๋ ์ฑ์ Firebase JobDispatcher๋ฅผ ์์์ ์ ํํด ๋์ํ๋ค. WorkManager๋ ์ด ์ด์ ์์คํ
๋ค์ ์ถ์ํ ๊ณ์ธต(= ๋ณต์ก์ฑ์ ๊ฐ์ถ๊ณ , ์ผ๊ด๋ API๋ฅผ ์ ๊ณตํ๋ ๊ฒ)์ธ ๊ฒ์ด๋ค.
#3 ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๊ณผ์ ๋น๊ต
#3-1 Corutines (์ฝ๋ฃจํด)
์ฝ๋ฃจํด์ ์์
์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ฅผ ํ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ํ์ง๋ง ์ฑ์ด ์ข
๋ฃ๋์ด๋ ์ฌ์ ํ ์คํ๋๋ WorkManager์ ๋ฌ๋ฆฌ, ์ฝ๋ฃจํด์ ์ฑ์ด ์ข
๋ฃ๋ ๋ ๊ฐ์ด ์ข
๋ฃ๋๋ค. 1ํ์ฑ ์์
์ธ ๊ฒฝ์ฐ์๋, ๊ผญ ์๋ฃ์์ผ์ผํ๋ ์ค์ํ ์์
์ด๋ผ๋ฉด WorkManager๋ก ์์ฝํด๋๋ ๊ฒ์ด Corutines๋ณด๋ค ๋ ์์ ์ ์ด๋ค. ํนํ ์ฃผ๊ธฐ์ ์์
์ด๋ผ๋ฉด ๋ฐ๋์ WorkManager์ ์์
์ ๋งก๊ฒจ์ผ ํ๋ค. ์ฌ์ฉ์๊ฐ ์ฑ์ ์์ํ ์ผ๋ ๊ฒ์ด๋ผ๋ ๋ณด์ฅ์ด ๋น์ฐํ ์๊ธฐ ๋๋ฌธ์ด๋ค.
#3-2 AlarmManager
WorkManager๊ฐ ๋ด๋ถ์ ์ผ๋ก AlarmManager ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒฝ์ฐ(#2 ์ฐธ์กฐ)๋ ์์ง๋ง, ํ๋ก๊ทธ๋๋จธ ์
์ฅ์์ AlarmManager๋ฅผ WorkManager์ ๋์ฒด์ ๋ก ์ฌ์ฉํ ์๊ฐ์ ๋ง์์ผ ํ๋ค. ์๋ํ๋ฉด, AlarmManager๋ ์ฑ์ด ์ข
๋ฃ๋์ด๋ ์๋ํ์ง๋ง, ์ค๋งํธํฐ์ด Doze ๋ชจ๋(๊ธฐ๊ธฐ๊ฐ ์ผ์ ์๊ฐ ๋์ ์ฌ์ฉ๋์ง ์์ ์ ์ ๋ชจ๋๋ก ์ ํ๋ ์ํ)์ผ ๋ WorkManager์๋ ๋ฌ๋ฆฌ ๊ธฐ๊ธฐ๋ฅผ ๊นจ์๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋ฐฐํฐ๋ฆฌ ํจ์จ ๋ฐ ์ปดํจํ
์์ ์ ์ฝ ๋ฉด์์ ๋นํจ์จ์ ์ด๋ค. ํ ๋ง๋๋ก AlarmManager๋ ์ค์ง Alarm์ ์ํด์๋ง ์ฌ์ฉํ์.
#4 ์์ ์ ์ ํ
#4-1 ์์ ์ 3๊ฐ์ง ์ข ๋ฅ
WorkManager์ ์์
์ ๋งก๊ธธ ๋๋ ํฌ๊ฒ Immediate(์ฆ์), Long Running(์ฅ๊ธฐ ์คํ), Deferrable(์ง์ฐ ๊ฐ๋ฅ)์ 3๊ฐ์ง ์์
์คํ์ผ์ ์ค์ ํ ์ ์๋ค. ๋จผ์ , Immediate(์ฆ์)๋ ๋ง ๊ทธ๋๋ก ์ฆ์ ์ํ๋ ๊ฒ์ ๊ธฐ๋ํ๋ ์์
์ด๋ค. ์ง๋ ์ฑ์ ์๋ก ๋ค๋ฉด, '๋ด ์์น๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์' ๊ธฐ๋ฅ์ด๋ '๋ชฉ์ ์ง ๊ทผ์ฒ์ ๋์ฐฉํ๋ฉด ์๋ ค์ฃผ๊ธฐ' ๊ธฐ๋ฅ ๋ฐ์๋ฅผ Immediate๋ก ์ค์ ํ ๋งํ๋ค.
Long Running(์ฅ๊ธฐ ์คํ) ๋ํ ๋ง ๊ทธ๋๋ก ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ฑฐ๋, ์ฌ์ฉ์์ ๋๊ธฐ(Stand by)๋ฅผ ์ํ๋ ์์
์ด๋ค. ์๋ฅผ ๋ค์ด, ๋์ฉ๋ ํ์ผ์ ๋ค์ด๋ก๋ํ๋ ์์
ํน์ ๋ฌ๋ฆฌ๊ธฐ ์ธก์ ์ฑ์์ 30๋ถ ํ์ด๋จธ์ ์ข
๋ฃ ์๋ฆผ์ด ์ธ๋ฆฌ๋๋กํ๋ ์์
๋ฑ์ Long Running์ผ๋ก ์ค์ ํ ๋งํ๋ค.
Deferrable(์ง์ฐ ๊ฐ๋ฅ)์ ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ ๋๊น์ง '์ง์ฐ ๊ฐ๋ฅ'ํ ์์
์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, ์ธํฐ๋ท์ด ์ฐ๊ฒฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์
๋ก๋ํ๋ ์์
๋ฑ์ด๋ค. ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋๊น์ง WorkManager๊ฐ ๊ณ์ ํ์ธํ๊ธฐ ๋๋ฌธ์ ์ธํฐ๋ท์ ์์ํ ์ฐ๊ฒฐํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ์ธ์ ๊ฐ ์ํ๋๊ณ ๋ง ๊ฒ์ด๋ค.
#4-2 ์์ ์ ์ฃผ๊ธฐ์ฑ
WorkManager์ ์์
์ ๋งก๊ธธ ๋, ํด๋น ์์
์ด ํ ๋ฒ๋ง(One Time) ์ํ๋๋ฉด ๊ทธ๋ง์ธ์ง ์๋๋ฉด ์ฃผ๊ธฐ์ ์ผ๋ก(Periodic) ์ํ๋์ด์ผ ํ๋ ์ง๋ฅผ ์ ํด์ค ์ ์๋ค. ์ ์์ ๊ฒฝ์ฐ ์ค๋ฌธ ์กฐ์ฌ ์ฑ์์ ์ฌ์ฉ์๊ฐ ์ค๋ฌธ ์กฐ์ฌ๋ฅผ ์๋ฃํ๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์
๋ก๋ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ก ๋ค ์ ์๊ณ , ํ์์ ๊ฒฝ์ฐ ํ์ฌ ์ฌ๊ณ ๊ด๋ฆฌ ์ฑ์์ 30๋ถ๋ง๋ค ์ฌ๊ณ ์ ๋ณด๋ฅผ ์๋ฒ๋ก๋ถํฐ ๋ฐ์์ค๋ ๊ฒฝ์ฐ๋ฅผ ์๋ก ๋ค ์ ์๋ค.
#4-3 ์์ ์ ํ ์ ๋ฆฌ
Immediate | 1ํ์ฑ ์ํ (One Time) |
Long Running | 1ํ์ฑ ์ํ (One Time) |
Long Running | ์ฃผ๊ธฐ์ ์ํ (Periodic) |
Deferrable | 1ํ์ฑ ์ํ (One Time) |
Deferrable | ์ฃผ๊ธฐ์ ์ํ (Periodic) |
#4-1์ ์์
์คํ์ผ์ ๋ํด #4-2์ ์ฃผ๊ธฐ์ฑ๊น์ง ๊ณ ๋ คํ๋ฉด ์์ ํ์ ๊ฐ์ด ์์
์ ์ ํํํ ์ ์๋ค. Immediate ์คํ์ผ์ ๊ฒฝ์ฐ๋ ์ต์
์ด 1ํ์ฑ ์ํ๋ฐ์๋ ์๋ค. Immediate๋ ์ฆ์ ์ํ๋ ๊ฒ์ ๊ธฐ๋ํ๋ ์์
์ด๊ธฐ์, ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋ ์์
๊ณผ๋ ๊ทธ ๋ชฉ์ ์ด ๋๋จ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ด๋ค.
#5 ์์ฝ
WorkManager๋ ์์ Traffic์ ๊ตํต ์ ๋ฆฌํ๋ค.
'๊นจ์ ๊ฐ๋ ๐ > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] WorkManager - enqueueUniqueWork() (0) | 2024.06.17 |
---|---|
[Android] WorkManager - ๊ธฐ์ด (0) | 2024.06.17 |
[Android] Notifications - Action ๋ฒํผ ํด๋ฆญ ์ ์๋ฆผ Cancel (0) | 2024.06.14 |
[Android] Notifications - PendingIntent (0) | 2024.06.12 |
[Android] Notifications - ๊ธฐ์ด (0) | 2024.06.12 |