πŸ€μ•ˆλ“œλ‘œμ΄λ“œ/β˜€οΈ ν•˜κ³„ 인턴 개발 ν”„λ‘œμ νŠΈ 기둝

πŸ‘€ Android 의 4λŒ€ κ΅¬μ„±μš”μ†Œ Service에 λŒ€ν•΄ μ•Œμ•„λ³΄μž!

hyeonha 2024. 8. 12. 18:58

λ“€μ–΄κ°€κΈ° 전에

λ°±κ·ΈλΌμš΄λ“œμ—μ„œ λ™μž‘ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ•ˆλ“œλ‘œμ΄λ“œμ˜ 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