๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค2024 ์•ˆ๋“œ๋กœ์ด๋“œ/โ˜€๏ธ ํ•˜๊ณ„ ์ธํ„ด ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ก

๐Ÿ‘€ Android ์˜ 4๋Œ€ ๊ตฌ์„ฑ์š”์†Œ Service์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!

by hyeonha 2024. 8. 12.

๋ชฉ์ฐจ

    ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

    ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์•ˆ๋“œ๋กœ์ด๋“œ์˜ 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๊ฐ€ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์„œ๋น„์Šค๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚จ๋‹ค!!

    ์ด๋Ÿฐ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„œ๋น„์Šค ๋‚ด๋ถ€์—์„œ ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

    ๋งˆ๋ฌด๋ฆฌ

    ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณผ ์ฐจ๋ก€๋‹ค!  ๊ทธ ๊ณผ์ •์€ ๋‹ค์Œ ๊ธ€์—์„œ ๋‹ค๋ค„๋ณด๋„๋ก ํ•œ๋‹น 

    728x90