π‘μλλ‘μ΄λ κ°λ° νκ²½μμ μμ£Ό λ§μ£Όν μ μλ ANRμ λνμ¬ μ 리νμμ΅λλ€.
κ°μ
- μλλ‘μ΄λ κ°λ°μ μ§ννλ©΄μ ANR μλ¬λ₯Ό λ§μ£Όν μ μμ΅λλ€.
- μ΄λ μ¬μ©μκ° μ±μ μ κ±°νλ λμμΌλ‘ μ΄μ΄μ§ μ μλ μΉλͺ μ μΈ μλ¬μ΄λ©°, κ°λ°μλ μ΄λ₯Ό λ°λμ ν΄κ²°ν΄μΌ ν©λλ€.
- ANRκ³Ό κ΄λ ¨ν΄μ μμ£Ό μ¬μ©λλ μ©μ΄λ₯Ό μ 리νμμ΅λλ€.
κ΅μ°© μν
- ν μ€λ λμμ νμν 리μμ€λ₯Ό λ€λ₯Έ μ€λ λκ° λ³΄μ νμ¬, λ€λ₯Έ μ€λ λκ° ν΄λΉ 리μμ€λ₯Ό λκΈ°νλ μνλ₯Ό λ»ν©λλ€.
- μ€λ λκ° μ°μ λκΈ° μνκ° λλ©΄μ κ΅μ°© μνκ° λ°μν©λλ€.
Background Service
- μ¬μ©μμκ² λ³΄μ΄μ§ μκ³ λ¬΅μμ μΌλ‘ μ€νλλ©° μ¬μ©μκ° μλ μ¬λΆλ₯Ό μμ§ λͺ»ν©λλ€.
- λ°μ΄ν° λκΈ°ν, λ€νΈμν¬ μμ², DB μ λ°μ΄νΈ λ±μ μμ μ μ§νν©λλ€.
Foreground Service
- μ¬μ©μμκ² λμ λλ μμ μ μννλ©°, μλ¦Όμ²λΌ μ±κ³Ό μνΈμμ© νμ§ μλ κ²½μ°μλ μ€νλ©λλ€.
ANR
- Application Not respondingμ μ½μλ‘ μ ν리μΌμ΄μ μ΄ μλ΅νμ§ μμμ λ»ν©λλ€.
- μλλ‘μ΄λ κ°λ° λ¬Έμμλ μλμ κ°μ΄ μ μλμ΄ μμ΅λλ€.
Android μ±μ UI Thread(λ©μΈ μ€λ λ)κ° λ무 μ€λ«λμ μ°¨λ¨λ μ ANR μ€λ₯κ° λ°μν©λλ€. μλ κ·Έλ¦Όκ³Ό κ°μ΄ μ¬μ©μμκ² λν μμλ₯Ό νμνλ©°, μ¬μ©μκ° μ±μ κ°μ μ’ λ£ν μ μμ΅λλ€.
- ANRμ UI μ λ°μ΄νΈλ₯Ό λ΄λΉνλ μ±μ κΈ°λ³Έ μ°λ λκ° μ¬μ©μ μ λ ₯ μ΄λ²€νΈ λλ κ·Έλ¦Όμ μ²λ¦¬νμ§ λͺ»ν΄ μ¬μ©μ λΆλ§μ μ΄λνλ―λ‘ ν° λ¬Έμ κ° λ©λλ€.
ANR λ°μ μμΈ
μ λ ₯ μ λ¬ νμμμ
- μ±μ΄ ν€ λλ¦ λλ νλ©΄ ν°μΉ λ±μ μ λ ₯ μ΄λ²€νΈμ 5μ΄ μ΄λ΄μ μλ΅νμ§ λͺ»νλ κ²½μ° λ°μν©λλ€.
- λ€νΈμν¬ μμ², νμΌ μ½κΈ°,μ°κΈ° λ°μ΄ν°λ² μ΄μ€ μ κ·Ό λ± I/O μμ μ λ©μΈ μ€λ λμμ μ²λ¦¬ν λ λ°μνλ©° AsyncTask, Thread, Handler, Coroutine λ±μ νμ©νμ¬ ν΄κ²°ν μ μμ΅λλ€.
μλΉμ€ μ€ν
- μ±μμ μ μΈν μλΉμ€κ° λͺ μ΄ μ΄λ΄μ μλμ λμμ μ€νν μ μλ κ²½μ° λ°μν©λλ€.
- Service.onCreat()
- Service.onStartCommand()
- Service.onBind()
μΈν νΈ λΈλ‘λμΊμ€νΈ
- BroadcastReceiverκ° μ€μ λ μκ° λ΄μ μ€νμ μλ£νμ§ λͺ»ν κ²½μ° λ°μν©λλ€.
- λΈλ‘λμΊμ€νΈ μμ κΈ°λ 10μ΄ μ΄μ μ€νλλ©΄ ANRμ΄ λ°μν©λλ€.
- μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ JobIntentServiceλ WorkManagerλ₯Ό μ¬μ©ν΄ λΉλκΈ°μ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€.
ContentProviderμ κΈ΄ μκ° μ€ν
- ContentProviderλ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λ° λ무 λ§μ μκ°μ μμνλ©΄ ANRμ΄ λ°μν μ μμ΅λλ€.
- μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μ ContentProvider κ΄λ ¨ μμ μ μ΅μννκ³ λ°±κ·ΈλΌμ΄λμμ λ°μ΄ν°λ₯Ό μ²λ¦¬νλλ‘ ν΄μΌ ν©λλ€.
JobScheduler μνΈμμ©
- JobServiceκ° λͺ μ΄ μ΄λ΄μ λ°νλμ§ μμΌλ©΄ λ°μν©λλ€.
λ°λ³΅ μμ
- 무ν 루νλ κΈ΄ μκ° λμ μ€νλλ μμ μμλ λ°μν μ μμ΅λλ€.
- μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μ μμ μ λ°±κ·ΈλΌμ΄λ μ€λ λμμ μ²λ¦¬νκ±°λ, μΌμ μκ° κ°κ²©μΌλ‘ μ€λ λλ₯Ό ν΄μμμΌμΌ ν©λλ€.
ANR ν΄κ²° λ°©μ
λ©μΈ μ€λ λμμ I/O μμ μ€μ§
- λ€νΈμν¬ μμ², νμΌ μ²λ¦¬, λ°μ΄ν°λ² μ΄μ€ μ κ·Ό λ±μ λ°±κ·ΈλΌμ΄λ μ€λ λμμ μνν©λλ€.
λΉλκΈ° μ²λ¦¬ μ§μ
- Coroutine, AsyncTask, ExecutorService λ±μ μ¬μ©ν΄ λ°±κ·ΈλΌμ΄λλ λΉλκΈ° μμ μ μ§μν©λλ€.
λ©μΈ μ€λ λ λΆν κ°μ
- 볡μ‘ν UI μμ μ λλμ΄ μ²λ¦¬νκ³ , λ무 ν° μ΄λ―Έμ§ λ‘λ μμ μ μ΅μ νν©λλ€.
μ 리
ANRμ μ±μ μ±λ₯κ³Ό μ¬μ©μ κ²½νμ ν° μν₯μ λ―ΈμΉλ―λ‘, λ°±κ·ΈλΌμ΄λ μμ μ μ μ ν μ²λ¦¬νλ κ²μ΄ μ€μν©λλ€. λ©μΈ μ°λ λμμμ μμ μ μ£Όμνλ©°, λ³λμ μ€λ λλ λΉλκΈ° λ°μ΄ν° μ€νΈλ¦Όμ νμ©νλ κ²μ΄ μ’μ΅λλ€.