๋ชฉ์ฐจ
๋ค์ด๊ฐ๊ธฐ ์ ์
๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ์๋๋ก์ด๋์ Service ๊ฐ๋ ์ ์ดํด๊ฐ ํ์ํ์๋ค. ์์ง ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณธ ๊ฒฝํ์ด ์์ด์ ๊ฐ๋ ๋ถํฐ ์ ํํ ์ดํดํ๊ธฐ ์ํด ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค!!
์๋น์ค๋?
์๋ 2๊ฐ์ง ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ์.
1. ์ฌ์ฉ์์ ์ํธ์์ฉํ์ง ์์ผ๋ฉด์ ์ค๋ ์คํ๋๋ ์์ ์ ์ํ
2. ๋ค๋ฅธ ์ฑ๋ค์ด ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต
์๋น์ค๋ ๋ค๋ฅธ ์ฑ ๊ฐ์ฒด์ฒ๋ผ ํธ์คํ ํ๋ก์ธ์ค์ ๋ฉ์ธ ์ค๋ ๋์์ ์คํ๋๋ค.
๋ฐ๋ผ์ ์๋น์ค์์ CPU ์ง์ฝ์ ์ด๊ฑฐ๋ ๋ธ๋กํน ์์ (MP3 ์ฌ์, ๋คํธ์ํน)์ ์์ ์ ํด์ผํ๋ค๋ฉด ๋ณ๋์ ์ค๋ ๋์์ ํด๋น ์์ ์ ์คํํด์ค์ผํ๋ค.
์ฌ๊ธฐ์ ํธ์คํ ํ๋ก์ธ์ค๋ ์๋น์ค๊ฐ ์คํ๋๊ณ ์๋ ํ๋ก์ธ์ค๋ฅผ ๋งํ๋ค.
์๋๋ก์ด๋ ์ฑ์ ๋ณดํต ํ๋์ ํ๋ก์ธ์ค ์์์ ์คํ๋๋๋ฐ ๊ทธ ํ๋ก์ธ์ค์์์ ๋ค์ํ ๊ตฌ์ฑ ์์๋ค์ด ๋์ํ๊ฒ ๋๋ค.
์๋น์ค๋ ๊ทธ ํ๋ก์ธ์ค ์์์ ์คํ๋๋ ํ๋์ ๊ตฌ์ฑ์์์ด๋ค.
์๋น์ค์ ๋ํ ์คํด 2๊ฐ์ง!!
โ ์๋น์ค๋ ๋ณ๋์ ํ๋ก์ธ์ค์ด๋ค.
์๋น์ค ๊ฐ์ฒด ์์ฒด๋ก๋ ์์ ๋ง์ ํ๋ก์ธ์ค์์ ์คํ๋๋ค๋ ์๋ฏธ๊ฐ ์๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ์ด ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ก์ธ์ค ์์์ ์คํ๋๋ค๋ ๊ฒ์ด๋ค.
โ ์๋น์ค๋ ์ค๋ ๋์ด๋ค.
์๋น์ค ์์ฒด๊ฐ ๋ฉ์ธ ์ค๋ ๋ ์ธ๋ถ์์ ์์ ์ ์ํํ๋ ์๋จ์ด ์๋๋ผ๋ ๋ป์ด๋ค. ์ฆ ANR์ ๋ฐฉ์งํ๊ธฐ ์ํ ์๋จ์ด ๋์ง ๋ชปํ๋ค!!
๊ฒฐ๋ก ์ ์๋น์ค๋ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์๋๋ผ ๋จ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ ์ ์ํํ๊ฑฐ๋ ๋ค๋ฅธ ์ฑ์ ์์ ์ ๊ธฐ๋ฅ์ ๋ ธ์ถ์ํค๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ผ๋ฟ์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ตํ์!
์๋น์ค๊ฐ ์ ๊ณตํ๋ 2๊ฐ์ง ๊ธฐ๋ฅ
1. ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ ์ ์ํํ๊ณ ์ถ์ ๋ ์์คํ ์ ์๋ ค์ฃผ๋ ๊ธฐ๋ฅ
-> Context.startService()๋ฅผ ํตํด ์ํ
2. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ์ ๊ธฐ๋ฅ์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ธ์ถ์ํค๋ ๊ธฐ๋ฅ
-> Context.bindService() ๋ฅผ ํตํด ์๋น์ค์ ์ฅ๊ธฐ์ ์ธ ์ฐ๊ฒฐ์ ๋งบ์ ์ ์๋ค.
์ฌ๊ธฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ ์ ์ฒด๋ฅผ ์๋ฏธํ๋ค. ์๋น์ค๋ฅผ ํตํด ๋ค๋ฅธ ์ฑ๋ค์๊ฒ ๋ด ๊ธฐ๋ฅ์ ๋ ธ์ถ์ํฌ ์ ์๋ ๊ฒ์ด๋ค.
์.. ๊ทผ๋ฐ ์ด ๋ง๋ง ๋ฃ๊ณ ๋ ์์ง ์ ๋๋ก ์ดํด๊ฐ ๋์ง ์๋๋ค.
์์๋ฅผ ํตํด ์ดํดํด๋ณด์!!
๋ฉ์ ์ ์ฑ์์ ์ฌ์ฉ์๊ฐ ์์
์ ๊ณต์ ํ๊ณ ์ถ์ ๋ ์์
ํ๋ ์ด์ด ์ฑ์ ์๋น์ค๋ฅผ ์ด์ฉํด์ ์์
์ ์ฌ์ํ ์ ์๊ฒ ํ๋ ๊ฒ์ ์๊ฐํด๋ณด์
์ด๋ ๊ฒ ์๋น์ค๋ฅผ ํตํด ๋ค๋ฅธ ์ฑ๋ค์ ํน์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋น์ค์ ์์ฑ
์๋น์ค ์์ฑ๋๋ค๋ฉด ๋ญ๊ฐ ๋ฌด์ง๋ง์งํ๊ฒ ๊ฑฐ์ฐฝํ ์ผ์ด ์ผ์ด๋ ๊ฒ๋ง ๊ฐ๋ค!!
ํ์ง๋ง ์๋๋ค~ ์์คํ ์ ๋จ์ํ ์๋น์ค ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ onCreate() ์ฝ๋ฐฑ์ ํธ์ถํ ๋ฟ์ด๋ค.
์๋น์ค์ ์ข ๋ฅ
1. ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค
ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค๋ ๋จ์ด ๊ทธ๋๋ก ์ฌ์ฉ์๊ฐ ์ธ์งํ ์ ์๋ ์์ ์ ์คํํ๋ ์๋น์ค์ด๋ค.
์ ํ๋ธ ํ๋ฆฌ๋ฏธ์์ ๋ ์ฌ๋ ค๋ณด์ ์ฑ ์ ์ฒด๊ฐ ํ๋ฉด์ ๋ณด์ด์ง ์์๋ ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค๋ฅผ ํตํด ์์์ด๋ ๋ ธ๋๋ฅผ ๊ณ์ ์ฌ์ํ ์ ์๋ค.
ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ ๋์๋ ๋ฐ๋์ ์๋ฆผ์ ํ์ํด์ค์ผํ๋ค. ๋ํ ์ด ์๋ฆผ์ ์๋น์ค๋ฅผ ์ค์งํ๊ฑฐ๋ ํฌ๊ทธ๋ผ์ด๋์์ ์ญ์ ํ์ง ์๋ ํ ๋ซ์ ์ ์๋ค.
2. ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋น์ค
๋ฐฑ๊ทธ๋ผ์ด๋ ์๋น์ค๋ ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค์ ๋ฌ๋ฆฌ ์ฌ์ฉ์๊ฐ ์ธ์งํ์ง ๋ชปํ๋ ์์
์ ์คํํ๋ ์๋น์ค๋ฅผ ๋งํ๋ค.
3. ๋ฐ์ธ๋ฉ๋ ์๋น์ค
์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ ์์๊ฐ bindService()๋ฅผ ํธ์ถํ๋ฉด ์๋น์ค์ ๋ฐ์ธ๋ฉ๋๋ค.
๊ทธ๋ผ ์๋น์ค๋ ํด๋ผ์ธ์ธํธ-์๋ฒ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ฒ ๋์ด์ ๊ตฌ์ฑ ์์๋ค์ด ์๋น์ค์ ์ํธ์์ฉํ๊ณ ์์ฒญ์ ๋ณด๋ด๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์๊ฒ ๋๋ค.
๋๋ ํ ํ๋ฉด์ ์์น ์๋น์ค์ ๋ฐ์ธ๋ฉํ์ฌ, ์์น ์๋น์ค๊ฐ ๋์ ์ค์ธ์ง ์ค์ง ์ํ์ธ์ง์ ๋ฐ๋ผ ํํ๋ฉด์์ ๋ณด์ด๋ UI ์์์ ๋ฐ์ํด์ฃผ๊ณ ์๋ค.
๋ํ ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC)์ ํตํด์, ์ฆ ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์๋ ๊ตฌ์ฑ ์์๋ค๋ ์๋น์ค๋ฅผ ๋งค๊ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
๋ฐ์ธ๋ฉ๋ ์๋น์ค๋ ๋ค๋ฅธ ๊ตฌ์ฑ์์๊ฐ ๋ฐ์ธ๋ฉ๋ ๊ฒฝ์ฐ์๋ง ์คํ๋๊ณ , ๋ชจ๋ ๊ตฌ์ฑ์์๊ฐ ๋ฐ์ธ๋ฉ์ ํด์ ํ๋ฉด ์๋น์ค๋ ์๋ฉธํ๋ค.
์์๋ ์๋น์ค์ ๋ฐ์ธ๋ฉ๋ ์๋น์ค
- onStartCommand() : ๊ตฌ์ฑ์์๊ฐ ์์ํ ์ ์๋๋ก ํ์ฉํด์ค๋ค
- bindService() : ์๋น์ค์ ๊ฒฐํฉํ๋ ๊ฒ์ ํ์ฉํด์ค๋ค.
์๋น์ค ์ฝ๋ฐฑ ๋ฉ์๋
๊ทธ๋ฌ๋ฉด ์ด์ ์๋น์ค์ ๊ด๋ จ๋ ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ์์๋ณด์~!!
1. onStartCommand
์กํฐ๋นํฐ์ ๊ฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ์์๊ฐ ์๋น์ค ์์์ ์์ฒญํ๊ธฐ ์ํด startService๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด
์๋น์ค์ onStartCommand๊ฐ ํธ์ถ๋๋ค!
์ด ๋ฉ์๋๊ฐ ์คํ๋๋ฉด ์๋น์ค๊ฐ ์์๋๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฌด๊ธฐํ์ผ๋ก ์คํ๋ ์ ์๋ค.
๋ฐ๋ผ์ ๋ง์ฝ ์๋น์ค๋ฅผ ์ค์งํ๊ณ ์ถ๋ค๋ฉด stopSelf ๋๋ stopService๋ฅผ ํธ์ถํด์ค์ผํ๋ค.
2. onBind
๋ค๋ฅธ ๊ตฌ์ฑ์์(์ : ์กํฐ๋นํฐ) ๊ฐ ์๋น์ค์ ์ฐ๊ฒฐํ๊ณ ์ถ์ด!! ํ๋ฉด์ ๊ฒฐํฉ(๋ฐ์ธ๋ฉ)์ ์ํ๋ค๋ฉด ์์คํ ์ bindService๋ฅผ ํธ์ถํ๋ค.
ํด๋น ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ์๋น์ค์ onBind ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
onBind ๋ฉ์๋๋ฅผ ๊ตฌํํ ๋์๋ IBinder์ ๋ฐํํ๋ฉฐ ํด๋ผ์ด์ธํธ(์๋น์ค์ ์ฐ๊ฒฐํ๊ณ ์ถ์ ์กํฐ๋นํฐ)๊ฐ ์๋น์ค์ ํต์ ํ๋๋ฐ ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ผํ๋ค.
์ฝ๋๋ ์ด๋ ๊ฒ ์๊ฒผ๋น
override fun onBind(intent: Intent?): IBinder? {
return LocationBinder()
}
์ด ๋ฉ์๋๋ ๋ฐ๋์ ๊ตฌํํด์ผํ๊ณ , ๋ง์ฝ ์๋น์ค์์ ์ฐ๊ฒฐ์ ์ํ์ง ์๋๋ค๋ฉด null์ ๋ฆฌํดํด์ผํ๋ค.
3. onCreate
onCreate๋ ์กํฐ๋นํฐ์์๋ ๋งจ๋ ๋ณด์์ ์ฝ๋ฐฑ ๋ฉ์๋์ด๋ค.
์๋น์ค์์์ onCreate ๋ฉ์๋๋ ์ด๋ค์ง ํ๋ฒ ์์๋ณด์
onCreate ๋ ์๋น์ค๊ฐ ์ฒ์ ์์ฑ๋ ๋ 1๋ฒ๋ง ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค. ๋ฐ๋ผ์ ์๋น์ค์ ์ด๊ธฐ ์ค์ ์์ ๋ค์ ์ํํ๊ฒ ๋๋ค.
๋ง์ฝ ์๋น์ค๊ฐ ์ด๋ฏธ ์คํ์ค์ด๋ผ๋ฉด? ์ด ๋ฉ์๋๋ ํธ์ถ๋์ง ์๊ณ onStartCommand๋ onBind๊ฐ ๋จผ์ ๋ถ๋ฆฌ๊ฒ ๋๋ค.
4. onDestroy
onDestroy๋ ์์คํ ์ด ๋์ด์ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ๊ดดํ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค.
๊ฐ๋ฐ์๋ค์ ์ด ๋ฉ์๋์์ ์๋น์ค๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๋ฆฌ์์ค, ์ค๋ ๋๋ ๋ฑ๋ก๋ ๋ฆฌ์ค๋, ์์ ๊ธฐ ๋ฑ์ ์ ๋ฆฌํ๋ฉด ๋๋ค.
์ด ๋ฉ์๋๋ ์๋น์ค๊ฐ ํ๊ดด๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ ๋ง์ง๋ง ์ฝ๋ฐฑ !! ๋ฐ๋ผ์ ์๋น์ค ์ข ๋ฃ ์ ๋ง์ง๋ง์ผ๋ก ์ ๋ฆฌํ ์ ์๋ ๊ธฐํ์ด๋ค.
์ฌ์ง์ผ๋ก ๋ณด๋ฉด ์๋์ ๊ฐ๋ค (์ถ์ฒ๋ ์๋ ๊ณต์๋ฌธ์)
์๋น์ค์ ๋์ ์ธ์ ์ผ๊น?
- ๋ง์ฝ ์๋น์ค๊ฐ startService๋ก ์์ฑ๋์๋ค๋ฉด ๊ทธ๋ก์ธํด onStartCommand๊ฐ ํธ์ถ๋์๋ค๋ฉด
์๋น์ค์ ๋์ ๊ทธ ์์ฒด๋ก stopSelf๋ฅผ ํธ์ถํ๊ฑฐ๋ ๋ค๋ฅธ ๊ตฌ์ฑ์์์ ์ํด stopService๊ฐ ํธ์ถ๋ ๋์ด๋ค
- ๋ง์ฝ ์๋น์ค๊ฐ bindService๋ก ์์ฑ๋์๋ค๋ฉด onStartCommand๊ฐ ํธ์ถ๋์ง ์์๋ค๋ฉด
์๋น์ค๋ ๊ตฌ์ฑ์์์ ์ฐ๊ฒฐ๋์ด์๋ ํ ๊ณ์๋๋ค. ๋ง์ฝ ์๋น์ค๊ฐ ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์์คํ ์ ์๋น์ค๋ฅผ ์๋ฉธ์ํจ๋ค.
์๋น์ค์ ์์
์๋น์ค๊ฐ ์์๋๋ฉด ์๋น์ค์ ์๋ช ์ฃผ๊ธฐ๋ ์๋น์ค๋ฅผ ์์ฑํ ๊ตฌ์ฑ์์์๋ ๋ ๋ฆฝ์ ์ธ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ค.
๊ทธ๋์ ์๋น์ค๋ ์์ํ ๊ตฌ์ฑ์์๊ฐ ํ๊ดด๋๋๋ผ๋ ๊ณ์ํด์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฌด๊ธฐํ์ผ๋ก ์คํ๋ ์ ์๋ค.
์ ์ด์ ์ฝ๋๋ฅผ ํตํด ์๋น์ค๋ฅผ ์ด๋ป๊ฒ ์์ํ๋์ง ์์๋ณด์
์ด๋ ๊ฒ ์๋น์ค ์ธํ ํธ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ intent์ action๊ณผ ํจ๊ป startForegroundService๋ฅผ ํธ์ถํด์ฃผ์๋ค.
val locationIntent = Intent(context, LocationForegroundService::class.java).apply {
action = "START_LOCATION_SERVICE"
}
context?.startForegroundService(locationIntent)
startForegroundService๊ฐ ํธ์ถ๋๋ฉด ์๋น์ค ๋ด์ onStartCommand ๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ intent๋ก ์ ๋ฌ๋ action์ ๋ฐ๋ผ ๋์์ ์ํํ๊ฒ ํด์ฃผ์๋ค.
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
when (intent?.action) {
"START_LOCATION_SERVICE" -> {'''}
}
์ฃผ์ํ ์
์๋น์ค๋ฅผ ๋ฉ์ธ ์ค๋ ๋์์ ์คํํ๊ฒ ๋๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค...!
์ ํํ ์ด๋ค ๋ฌธ์ ๋ ํ๋ฉด . .
์๋น์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ์ธ ์ค๋ ๋์์ ๋์๊ฐ๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ ํ๋ก์ธ์ค์์ ๋์ํ๋ค.
์ฆ ์๋น์ค๋ ๋ฉ์ธ ์ค๋ ๋์์ ๋์๊ฐ๋ค. ๊ทธ๋ฐ ์ค๋ ๋์์ ์ง์ค์ ์ด๊ณ , ๋ธ๋กํน์ ๋์์ ์ํํ๋ฉด์ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ ์กํฐ๋นํฐ์ UI๊ฐ ์ฌ์ฉ์์ ์ํธ์์ฉํ๊ณ ์๋ค๋ฉด ์๋น์ค๋ ์กํฐ๋นํฐ ์ฑ๋ฅ์ ์ ํ์ํจ๋ค!!
์ด๋ฐ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ง๊ธฐ ์ํด์๋ ์๋น์ค ๋ด๋ถ์์ ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ํ๋ ๊ฒ์ด ์ข๋ค.
๋ง๋ฌด๋ฆฌ
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณผ ์ฐจ๋ก๋ค! ๊ทธ ๊ณผ์ ์ ๋ค์ ๊ธ์์ ๋ค๋ค๋ณด๋๋ก ํ๋น
'๐ค2024 ์๋๋ก์ด๋ > โ๏ธ ํ๊ณ ์ธํด ๊ฐ๋ฐ ํ๋ก์ ํธ ๊ธฐ๋ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android : Handler ์ดํดํ๊ธฐ (0) | 2024.08.29 |
---|---|
Android ๊ถํ ์์ฒญ ์ฒ๋ฆฌํ๊ธฐ (๋ฐํ์ ๊ถํ??) (0) | 2024.08.23 |
Android Thread (0) | 2024.08.19 |
๐ ํ๋ก์ ํธ ์๋ฃ ํ 4L ํ๊ณ (0) | 2024.08.19 |
๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ธก์ ํด๋ณด๊ธฐ (2) | 2024.08.14 |