https://goni95.tistory.com/173
์๋๋ก์ด๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๋ํ ์ ๋ฆฌ๋ฅผ ํด๋ณผ๊น ํฉ๋๋ค. ์ ๋ชฉ ๊ทธ๋๋ก ์๋๋ก์ด๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๋ํ ๋ชจ๋ ๊ฒ์ ์ ๋ฆฌํด๋ณผ๊น ํฉ๋๋ค.
1๏ธโฃ ์๋๋ก์ด๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์๋๋ก์ด๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๋ํด์ ์์๋ณด๊ธฐ ์ ์ ํฌ๊ทธ๋ผ์ด๋์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ํฌ๊ทธ๋ผ์ด๋์ ์๋ค๋ผ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ Activity๊ฐ ๋ณด์ด๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ forgound service๊ฐ ์คํ๋๊ณ ์๋ค ๋ฑ์ผ๋ก ๋ง์ด๋ค ์ค๋ช ํฉ๋๋ค.
์ํ ๊ด์ ์์ ํฌ๊ทธ๋ผ์ด๋์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ ๊ฐ๋จํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์์๊ฒ ํ์๋๊ณ ์์ด ๋์ผ๋ก ํ์ธํ ์ ์๋ ์ํ๋ผ๋ฉด ํฌ๊ทธ๋ผ์ด๋ / ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์์๊ฒ ํ์๋์ง ์์ ๋์ผ๋ก ํ์ธํ ์ ์๋ ์ํ๋ผ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋๋ผ๊ณ ์ดํดํ๋ฉด ๋๊ฒ ์ต๋๋ค.
์ฆ, ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ด์ง ์๋ ๋ทํธ์์ ์คํ ์ค์ธ ์์ ์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์๋๋ก์ด๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๋ถ๋ฅํ๋ ๊ธฐ์ค๊ณผ ์ฌ์ฉํ ์ ์๋ API๋ค์ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
์ฆ๊ฐ์ ์ธ ์คํ์ด ํ์ํ๊ณ , ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ์์ฉํ๋ ๋์ ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์ค์ธ ๋์ ์์ ์ ์๋ฃํด์ผํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด Coroutine, Rx๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฆ๊ฐ์ ์ธ ์คํ์ด ํ์ํ๊ณ , ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ ํํ๊ฑฐ๋ ๊ธฐ๊ธฐ๋ฅผ ๋ค์ ์์ํ๋๋ผ๋ ์คํ์ด ๋ณด์ฅ๋๊ณ ์ง์์ ์ธ ์ฒ๋ฆฌ(๋์์ด)๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ผ๋ฉด WorkManager(OneTimeWorkRequest)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ง์ฐ๋์ด, ์ํฉ์ด๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์คํํ๋๋ก ์์ฝ๋ ๊ฒฝ์ฐ๋ผ๋ฉด WorkManager๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ง์ฐ๋์ด, ์ ํํ ์๊ฐ์ ์คํํ๋๋ก ์์ฝ๋ ๊ฒฝ์ฐ๋ผ๋ฉด AlarmManager๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ์ฒ๋ฆฌ ๊ฐ์ด๋๋ฅผ ํ์ธํด๋ณด๋ฉด ๋๋ถ๋ถ WorkManager๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค๊ณ ๋์ต๋๋ค. ์ ๊ทธ๋ฐ์ง ์์๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ ์๋๋ก์ด๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ง์ํ๋ API๊ฐ WorkManager, AlarmManager๋ฅผ ์ ์ธํ๊ณ ๋ ๋ ์์ต๋๋ค.
Service
๊ธฐ๋ณธ์ ์ผ๋ก UI ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋น์ค๋ฅผ ํตํด ANR์ ํผํ๋ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์๋น์ค๋ฅผ ์ด์ฉํ ๊ธด ์๊ฐ์ ์์ ์ ํ๊ณ ์ถ๋ค๋ฉด ๋ณ๋์ ์ค๋ ๋ ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์์ด ๋ง์ด ๊ฐ๊ณ ๊ทธ ๊ณผ์ ์์ ๋ฒ๊ทธ๋ฅผ ๋ฐ์์ํค๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋ ์ ์์ต๋๋ค.
์๋น์ค๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ bind ํ ์ ์์ด์ ๋ง์ฝ ์กํฐ๋นํฐ์ bind๋ฅผ ์ํค๋ฉด ์๋น์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ UI๋ฅผ ์กํฐ๋นํฐ์์ ์ฒ๋ฆฌํ๋๋ก ํ ์ ์์ต๋๋ค.
Foreground Service๋ Notification์ ํํ๋ก ํ์ํด์ผ ํฉ๋๋ค. ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋์ง ์๋ ์ด์ ์ฌ์ฉ์์ ์ํธ์์ฉํ์ง ์๋๋ผ๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ณ์ํด์ ์คํ๋๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋๊ฑฐ๋, ์๋น์ค๊ฐ ์ค์ง๋์ง ์๋ ์ด์ Notification์ ํด์ ํ ์ ์์ต๋๋ค.
Background Service๋ Notification์ด ์กด์ฌํ์ง ์๊ณ , ์ฑ์ด ์ข ๋ฃ๋์ด๋ ๊ณ์ํด์ ์คํ๋๋๋ฐ ์ด๋ฐ ์๋น์ค๊ฐ ๊ธฐ๊ธฐ์ ๋๋ฌด ๋ง์ด ์กด์ฌํ๊ฒ ๋๋ฉด Ram์ ์์ฃผํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ํ์ ๋ฒ ํฐ๋ฆฌ ์๋ชจ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ฒ ๋ฉ๋๋ค. ์๋๋ก์ด๋์์ ์ด๋ฐ ์ด์ ๋ก Android 8.0(API 26 : Oreo) ์ด์์ธ ๋ฒ์ ผ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ ํ๋๊ณ ๋ช ๋ถ ์ ๋์ ๊ธฐ๊ฐ์ด ์ง๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ํด ์ํ๋ก ๊ฐ์ฃผ๋์ด ์์คํ ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋น์ค๋ฅผ ์ค์ง์ํต๋๋ค.
Bound service๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ์ ๋ฐ์ธ๋ฉ๋๋ ์๋น์ค ์ ๋๋ค. ๋ฐ์ด๋ ์๋น์ค๋ ์์ฒญ์ ๋ณด๋ด๊ฑฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ํด๋ผ์ด์ธํธ-์๋ฒ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ์ปดํฌ๋ํธ๊ฐ ์๋น์ค์ ์ํธ์์ฉํ๊ฒ ํ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ๊ฒ ๋ถํฐ ์ฌ๋ฌ ํ๋ก์ธ์ค์ ๊ฑธ์ณ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
์๋น์ค๋ ๋ฐ์ธ๋ฉ๋ ์กํฐ๋นํฐ๊ฐ ์ฌ๋ผ์ง๋ฉด ์๋น์ค๋ ์๋ฉธ๋๊ธฐ ๋๋ฌธ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฌดํํ ์คํ๋์ง ์์ต๋๋ค.
IntentService์ JobintentService (โ deprecated)
์์์ ์๋น์ค๋ฅผ ์ค๋ช ํ ๋ ๋งํ๋ฏ์ด ์๋น์ค๋ ๋ณ๋์ ์ค๋ ๋ ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ์ ๊ตฌ๊ธ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ๋์ํ๋ IntentService๋ฅผ ์ ์ํ๊ณ , Android 8.0(API 26 : Oreo) ๋ถํฐ ์ง์๋ JobintentService๊ฐ ์์ต๋๋ค.
IntentService๋ ์์ ์ด ์์ฐจ์ ์ผ๋ก ์ํ๋๊ณ ํ๋ฒ์ ํ๋์ ์์ ๋ง ์ํํ๊ธฐ ๋๋ฌธ์ ์๋น์ค์๋ ๋ ๋ค๋ฅด๊ฒ ๋์ํ๊ณ ์ฌ๋ฌ ์์ ์ ๋์์ ํด์ผํ๋ ๊ฒฝ์ฐ์ ๋ง์ง ์์ต๋๋ค.
Android 11(API 30 : Red velevet cake) ๋ถํฐ deprecated ๋์์ต๋๋ค.
JobintentService๋ ๊ธฐ๋ณธ์ ์ผ๋ก IntentService์ ๋น์ทํ๊ฒ ๋์ํ๊ณ BIND_JOB_SERVICE ๊ถํ์ด ํ์๋ก ํ์ํฉ๋๋ค. ์ ํ์๊ฐ์ 10๋ถ์ผ๋ก ๊ฐ์ ์ข ๋ฃ๋๊ธฐ ๋๋ฌธ์ 10๋ถ ์์ ๋์ํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฒ๋ฆฌ์ ์ ํฉํฉ๋๋ค.
ํ์ฌ๋ deprecated ๋์์ต๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ์ฒ๋ฆฌ ๊ฐ์ด๋์์ ์์ฃผ ์ธ๊ธ๋์๋ WorkManager ์ ๋๋ค.
WorkManager
์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋๊ฑฐ๋ ๊ธฐ๊ธฐ๊ฐ ๋ค์ ์์๋์ด๋ ์คํ์ด ๋ณด์ฅ๋๋ ์ง์ฐ ๊ฐ๋ฅํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ง์ฐ์ด ๊ฐ๋ฅํ๋ ์๋ฏธ๋ ์คํ์ ๋ํ ์์ฝ
์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ Worker ๊ฐ์ฒด๋ก ๊ตฌํํ๋ฉด Worker๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, Worker๋ฅผ ๊ธฐ๋ฐ์ผ๋ก WorkRequest๋ฅผ ์์ฑํ์ฌ ํ๋ฒ๋ง ์ํํ ๊ฒ์ธ์ง, ์กฐ๊ฑด(๋คํธ์ํฌ/๋ฒ ํฐ๋ฆฌ ์ํ์ ๋ฐ๋ผ ํธ๋ฆฌ๊ฑฐ ๋ฑ)์ ์ํด ๋ฐ๋ณต ์ํํ ๊ฒ์ธ์ง๋ฅผ ์ ํ ์ ์์ต๋๋ค. ๊ธฐ๊ธฐ๋ฅผ ๊นจ์ฐ๋ wake_lock์ ์์ฒด ๊ด๋ฆฌํ๋ฏ๋ก ๊ถํ ์ถ๊ฐ๋ฅผ ํตํด ์๋์ผ๋ก ๊ด๋ฆฌํด์ค๋๋ค. ํด๋น ๋ถ๋ถ์ Oreo ์ดํ์์ ์ง์ ๊ตฌํํด์ผํจ
์๋น์ค๋ฅผ ์ฌ์ฉํ ๋ ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค๋ฅผ ์ฌ์ฉํด์ผ ์ค๋ซ๋์ ์ฃฝ์ง์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ํ ์ ์๋๋ฐ, ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค๋ก๋ ๋์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ค๋ ์์๋ณธ ๊ฒ์ ์ ๋ฆฌํ์๋ฉด ํ์ฌ ์๋๋ก์ด๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ฌ๋งํด์ WorkManager๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
๊ฐ๋จํ๊ณ ์งง์ ์์ / ๊ธด ์์ ๋ชจ๋ WorkManager๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ํด์ผํ๋ค๋ฉด WorkManager๋ฅผ ๋จผ์ ๋ ์ฌ๋ฆฌ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ง๋ง ๋ค์ด๋ก๋ ์ค์ผ ๋ ์ฑ์ ์ข ๋ฃํ๋ค๊ฐ ์คํํด๋ ๋ค์ด๋ก๋ ์ํ๊ฐ ํ์๋๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ๊ธด ์์ ๊ณผ UI ์ ๋ฐ์ดํธ์ ๊ฒฝ์ฐ์๋ WorkManager๋ง์ผ๋ก๋ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ด๋ ต๊ธฐ ๋๋ฌธ์ Bound Service์ Foreground Service๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.