μλΉμ€ κ°λ
μλΉμ€λ?
μλλ‘μ΄λ 4λ μ»΄ν¬λνΈ μ€ νλ
μ ν리μΌμ΄μ μ κ°λ°νλ€ λ³΄λ©΄ μ¬μ©μ μΈν°νμ΄μ€ μμ΄ λ°±κ·ΈλΌμ΄λμμ μ€νλλ λμμ΄ νμν κ²½μ°κ° μμ
Ex) λ°°κ²½ μμ μ¬μ, νΉμ ν μΉ μ¬μ΄νΈμμ μ£ΌκΈ°μ μΌλ‘ λ°μ΄ν°λ₯Ό μ½μ΄μ€λ κ²½μ°
μ΄λ° κ²½μ° μ¬μ©νλ κ²μ΄ λ°λ‘ μλΉμ€
μλΉμ€μ νΉμ§
- μ‘ν°λΉν°μλ λ¬λ¦¬, μ¬μ©μ μΈν°νμ΄μ€λ₯Ό κ°μ§μ§ μμ
- μλΉμ€λ μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ μ μν΄ μμλ¨
- νλ² μμλ μλΉμ€λ μ¬μ©μκ° λ€λ₯Έ μ ν리μΌμ΄μ μΌλ‘ μ΄λνλλΌλ λ°±κ·ΈλΌμ΄λμμ κ³μ μ€νλ¨
- λͺ¨λ μ ν리μΌμ΄μ κ΅¬μ± μμκ° ν΄λΉ μλΉμ€λ₯Ό μ¬μ©ν μ μμ(μ¬μ§μ΄ λ³λμ μ ν리μΌμ΄μ μμλ μ¬μ© κ°λ₯)
- μλΉμ€λ₯Ό μ΄μ©νλ©΄ IPC(νλ‘μΈμ€ κ° ν΅μ ) κΈ°λ₯λ ꡬνν μ μμ
- λ€νΈμν¬ νΈλμμ , μμ μ¬μ, νμΌ μ μΆλ ₯, μ½ν νΈ μ 곡μμμ ν΅μ μ μν΄ μ£Όλ‘ μ¬μ©λ¨
μλΉμ€μ μΈν νΈ
- μλΉμ€λ μ‘ν°λΉν°μ λ§μ°¬κ°μ§λ‘ μΈν νΈ κ°μ²΄λ₯Ό μ΄μ©νμ¬ μμν¨
- μ΄λ ν νμ μ μλΉμ€λ μΈν νΈ κ°μ²΄λ₯Ό ν΅ν΄ μμ
μλΉμ€μ λ©λνμ€νΈ νμΌ
- μλΉμ€λ λ©λνμ€νΈ νμΌ μμ 곡μ©μΌλ‘ μ μΈλμ΄μΌ μ¬μ©μ΄ κ°λ₯ν¨
- λ§μΌ λ©λνμ€νΈ νμΌμμ μλΉμ€λ₯Ό μ μ©μΌλ‘ μ μΈνλ©΄ λ€λ₯Έ μ ν리μΌμ΄μ μμλ κ·Έ μλΉμ€μ μ κ·Ό λΆκ°
μλΉμ€μ μ’ λ₯
μμ νμ μλΉμ€
- μ‘ν°λΉν°κ° startService()λ₯Ό νΈμΆνμ¬ μλΉμ€λ₯Ό μμνλ©΄ μμ νμ μλΉμ€κ° λ¨
- μμ νμ μλΉμ€λ νλ² μμλλ©΄ λ°±κ·ΈλΌμ΄λμμ 무νμ μ€νλ μ μμ
- νμ§λ§ λ³΄ν΅ μμ μ΄ λ§‘μ μ²λ¦¬λ₯Ό μλ£νλ©΄ μ€μ€λ‘ μλ©Έλ¨
- μμ νμ μλΉμ€λ νΈμΆμμκ² κ²°κ³Όλ₯Ό λ°νν μ μμ
- Ex) λ€νΈμν¬μμ νμΌμ λ€μ΄λ‘λ νλ κΈ°λ₯
λ°μΈλ μλΉμ€
- μ‘ν°λΉν°κ° bindService()λ₯Ό νΈμΆνμ¬μ μλΉμ€λ₯Ό μμνλ©΄ λ°μΈλ μλΉμ€κ° λ¨
- λ°μΈλ μλΉμ€λ ν΄λΌμ΄μΈνΈ-μλ² κ΅¬μ‘°μ κ°μ΄ λμν¨
- μ‘ν°λΉν°λ μλΉμ€μ μ΄λ ν μμ²μ μ μ‘νκ³ , κ²°κ³Όλ₯Ό μλ΅ λ°μ μ μμ
- μ΄λ¬ν μ΄μ λ‘ IPCμμ μ¬μ©μ΄ κ°λ₯ν¨
- μμ νμ μλΉμ€μ λ€λ₯΄κ² μ°κ²°λ μ‘ν°λΉν°κ° μ¬λΌμ§λ©΄, μλΉμ€λ μλ©Έλ¨
- νλμ μλΉμ€μλ λ€μμ μ‘ν°λΉν°κ° μ°κ²°λ μ μμ
μ°Έκ³ ) μμ νμ μλΉμ€μ νΉμ§λλ‘ λ¬΄νμ μ€νλλ©΄μ, λ°μΈλ μλΉμ€μ νΉμ§λλ‘ λ°μΈλλ νμ©ν μ μμ
μλΉμ€μ μ€λ λ
μλΉμ€μ μ€λ λλ λΉμ·ν κ² κ°μλ°?
- μ΄ν리μΌμ΄μ μ΄ μ’ λ£λκ³ λ λ°±κ·ΈλΌμ΄λμμ μνλ μ μλλ°?
- μλΉμ€λ κ·Έμ λ°±κ·ΈλΌμ΄λμμ μ€νλ μ μλ κ΅¬μ± μμμ
- λ§μ½ μ¬μ©μκ° μ ν리μΌμ΄μ κ³Ό μνΈμμ©νλ λμ κΈ°λ³Έ μ€λ λ λ°μμ μμ μ μνν΄μΌ νλ κ²½μ°, μλΉμ€ λ΄μ μ μ€λ λλ₯Ό μμ±ν΄μΌν¨
- onCreate()μμ μ€λ λλ₯Ό μμ±νκ³ , onStart()μμ μ€ννκΈ° μμν λ€μ, onStop()μμ μ€λ¨ν κ²
μλΉμ€μ ꡬν
μλΉμ€λ₯Ό μμ±νλ €λ©΄ Serviceμ νμ ν΄λμ€λ₯Ό μμ±ν΄μΌν¨
μλΉμ€ μλͺ μ£ΌκΈ°λ₯Ό μ²λ¦¬νλ μ½λ°± λ©μλλ₯Ό μ¬μ μν΄μΌν¨
μλΉμ€μ λ°μΈλ©ν κ΅¬μ± μμμ λν 맀컀λμ¦μ μ 곡ν΄μΌ ν¨
onStartCommand()
- κ΅¬μ± μμκ° μλΉμ€λ₯Ό μμνλλ‘ μμ²νλ κ²½μ° νΈμΆλ¨ (startService()λ₯Ό νΈμΆ ν κ²½μ°)
- μ΄ λ©μλκ° μ€νλλ©΄ μλΉμ€κ° μμλκ³ λ°±κ·ΈλΌμ΄λμμ 무νν μ€νλ¨
- μλΉμ€λ₯Ό μ€λ¨νλ κ²μ κ°λ°μμ μ± μμ΄λ©°, stopSelf() λλ stopService()λ₯Ό νΈμΆνλ©΄ λ¨
- λ°μΈλ μλΉμ€λ₯Ό μ 곡νλ €λ©΄, μ΄ λ©μλλ₯Ό ꡬννμ§ μμλ λ¨
onBind()
- λ€λ₯Έ κ΅¬μ± μμκ° ν΄λΉ μλΉμ€μ λ°μΈλ©λκ³ μ νλ κ²½μ°μ νΈμΆλ¨ (bindService()λ₯Ό νΈμΆ ν κ²½μ°)
- ν΄λΌμ΄μΈνΈμ μλΉμ€μ ν΅μ μ μ£Όκ³ λ°κΈ° μν΄ μ¬μ©ν μΈν°νμ΄μ€λ₯Ό μ 곡ν΄μΌ ν¨
- μ΄λ IBinderλ₯Ό λ°ννλ©΄ λ¨
- λ°μΈλ©μ νμ©νμ§ μμΌλ €λ©΄ nullμ λ°ννλ©΄ λ¨
onCreate()
- μλΉμ€κ° μ²μ μμ±λμμ λ(μ¦ onStartCommand(),onBind()λ₯Ό νΈμΆνκΈ° μ ) νΈμΆλμ΄ μΌνμ± μ€μ μ μ°¨λ₯Ό μν
- μλΉμ€κ° μ΄λ―Έ μ€νμ€μΈ κ²½μ°, νΈμΆλμ§ μμ
onDestroy()
- μλΉμ€λ₯Ό λ μ΄μ μ¬μ©νμ§ μκ³ μλ©Έμν¬ λ νΈμΆλ¨
- μ€λ λ, λ±λ‘λ 리μ€λ λλ μμ κΈ° λ±μ κ°μ’ 리μμ€λ₯Ό μ 리νκΈ° μν΄ μ΄κ²μ ꡬνν΄μΌ ν¨
- μλΉμ€κ° μμ νλ λ§μ§λ§ νΈμΆ
μλΉμ€μ μ μΈ
- <service> μμλ₯Ό <application> μμμ νμλ‘ μΆκ°νλ©΄ λ¨
- android:exported νΉμ±μ ν¬ν¨νκ³ μ΄λ₯Ό falseλ‘ μ€μ νλ©΄ μΈλΆμ μ±μμ μ¬μ©ν μ μμ, λͺ μμ μΈν νΈλ₯Ό μ¬μ©νλ κ²½μ°μλ μ μ©
μμλ μλΉμ€ ꡬν
μλΉμ€λ₯Ό ꡬννκΈ° μν΄μ Serviceλ IntentServiceλ₯Ό μμλ°μ ꡬνν΄μΌν¨
μλΉμ€κ° μμλλ©΄ μ΄λ₯Ό μμν κ΅¬μ± μμμ λ 립μ μΈ μλͺ μ£ΌκΈ°λ₯Ό κ°μ§
ν΄λΉ μλΉμ€λ₯Ό μμν κ΅¬μ± μμκ° μλ©ΈλλλΌλ λ°±κ·ΈλΌμ΄λμμ 무νν μ€νλ μ μμ
κ΅¬μ± μμκ° μλΉμ€λ₯Ό μμνλ €λ©΄ startService()λ₯Ό νΈμΆνκ³ , Intentλ₯Ό μ λ¬νλ©΄ λ¨
μΈν νΈμμ μλΉμ€λ₯Ό μ§μ νκ³ , μ΄ μλΉμ€κ° μ¬μ©ν λͺ¨λ λ°μ΄ν°λ₯Ό ν¬ν¨ν¨
μλΉμ€λ onStartCommand() λ©μλμμ μ΄ Intentλ₯Ό λ°κ²λ¨
Service
- λͺ¨λ μλΉμ€μ κΈ°λ³Έ ν΄λμ€
- μ΄ ν΄λμ€λ₯Ό νμ₯ν λλ μλΉμ€κ° λͺ¨λ μμ μ μλ£ν μ μλ μ μ€λ λμμ μμ±νλ κ²μ΄ μ€μν¨
- μλΉμ€λ κΈ°λ³Έμ μΌλ‘ κΈ°λ³Έ μ€λ λλ₯Ό μ¬μ©νκΈ°μ μ‘ν°λΉν°μ μ±λ₯μ μ νμν¬ μ μμ
- μλΉμ€κ° λ©ν° μ€λ λ©μ μνν΄μΌ νλ κ²½μ° Service ν΄λμ€λ₯Ό νμ₯νμ¬ κ΅¬ν
- μλ μμλ IntentService μ λμΌν κΈ°λ₯μ ꡬνν κ²μ
- κ° μμ²μ λν΄ μ€λ λλ₯Ό νλμ© μμ±ν λ€μ μ€ννλ©΄ λμμ μν κ°λ₯ν¨
IntentService
- Serviceμ νμ ν΄λμ€λ‘ μμ μ€λ λλ₯Ό μ¬μ©νμ¬ λͺ¨λ μμ μμ²μ μ²λ¦¬νλ, νλ²μ νλμ© μ²λ¦¬ν¨
- μλΉμ€κ° μ¬λ¬ κ°μ μμ²μ λμμ μ²λ¦¬νμ§ μμλ λλ κ²½μ°μ μ΅μ μ μ΅μ
- μμ²μ΄ λͺ¨λ μ²λ¦¬λ ν μλΉμ€λ₯Ό μ€λ¨νλ―λ‘ κ°λ°μκ° stopSelft() λ₯Ό νΈμΆν νμκ° μ ν μμ
- Service ν΄λμ€ κ΅¬νκ³Ό λ¬λ¦¬, onBind()κ° κΈ°λ³Έμ μΌλ‘ nullμ λ°νλλλ‘ κ΅¬νλμ΄ μμ
- νμμ μΌλ‘ onHandleIntent()λ₯Ό ꡬνν΄μΌν¨
- μλͺ μ£ΌκΈ° μ½λ°± λ©μλλ λ°λμ μνΌ ν΄λμ€μ λ³Έλ λ©μλλ₯Ό νΈμΆν΄μΌν¨
- κ·ΈλμΌλ§ IntentServiceκ° μμ μ€λ λμ μλͺ μ μ μ ν μ²λ¦¬ν μ μμ
- onBind()λ νΈμΆνμ§ μμλ λ¨
μλΉμ€μ μ€ν
- IntentService λ©μλλ₯Ό μ΄μ©νμ¬ μ€νμν¬ μ μμ μμ νμ μλΉμ€λ κ²°κ³Όλ₯Ό μ£Όκ³ λ°λ κ²μ΄ λΆκ°λ₯νμ§λ§, λ§μ½ ν΄λΌμ΄μΈνΈκ° PendingIntentλ₯Ό λ§λ€κ³ μ΄λ₯Ό μ λ¬νλ€λ©΄, μλΉμ€λ μ΄ λΈλ‘λμΊμ€νΈλ₯Ό νμ©νμ¬ κ²°κ³Όλ₯Ό μ λ¬ν μ μμ
Reference
https://developer.android.com/guide/components/services?hl=ko
μλΉμ€ κ°μ | Android κ°λ°μ | Android Developers
Serviceλ λ°±κ·ΈλΌμ΄λμμ μ€λ μ€νλλ μμ μ μνν μ μλ μ ν리μΌμ΄μ κ΅¬μ± μμμ΄λ©° μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ 곡νμ§ μμ΅λλ€. λ€λ₯Έ μ ν리μΌμ΄μ κ΅¬μ± μμκ° μλΉμ€λ₯Ό μμν μ μμΌοΏ½
developer.android.com