YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Korean subtitles

← 앱 life cycle과 서비스

Get Embed Code
10 Languages

Showing Revision 1 created 12/22/2014 by Inho Jeong.

  1. 4강에서 우리는 안드로이드 runtime이
  2. 눈에 띄는 활동이 없는 앱을
    종료시킨다는 것을 배웠고
  3. foreground 앱의 활동을 위한
    것이라는 사실도 배웠죠
  4. 하지만 앱이 보이지 않는 곳에서도
  5. 처리해야 할 활동이 있다면
  6. 예를 들어 다운로드, 사진 업로드
    음악 재생 같은 것이 있다면 어떨까요?
  7. 그런 것을 위한 앱 component가 있습니다
    activity, content provider와
  8. broadcase receiver, intent 같은 것들을
    이미 모두 배웠죠
  9. 서비스는 안드로이드
    앱 component를 위한
  10. 마지막 관문과도 같습니다
  11. service call을 시작할 때와
    마찬가지로
  12. 서비스를 시작할 수 있습니다
  13. 서비스를 종료하는 방법도
    중지하고자 하는 서비스 이름의
  14. stop service를 호출하여
    똑같이 할 수 있습니다
  15. activity와는 다르게 service는
  16. UI가 없고 백그라운드 활동보다
  17. 우선순위도 높지 않습니다
    실행중인 서비스를 가지고 있는 앱은
  18. foreground 활동을 위한
    리소스 확보 때문에 run time에 의해
  19. 종료될 가능성이 있다는 뜻입니다
  20. 하지만 기본 설정으로
    시스템은 앱 내에서 중지된 서비스를
  21. 재시작하려 할 것입니다
  22. 이것은 이렇게 단순화된
    life cycle에 의해서 된 것인데요
  23. Activity와는 다르게 서비스는
    방해 없이 오래 작동해야 하는
  24. 작동을 수행하도록 설계되었습니다
    보통 실행하고 싶은 백그라운드 작업을
  25. 시작하려고 할 때만
    onStartCommand handler를
  26. override 하게 되는데요
    앱 상태 변화를 모니터링하고
  27. 백그라운드 앱을 reflect할
    handler가 없다는 것을 기억하세요
  28. 서비스 자체를 실행하는 것은
  29. 포함하는 앱은
    서비스가 없는 백그라운드 앱보다
  30. 우선해야 한다는 신호를
    보내주는데요
  31. 어떤 경우에는 서비스가
    UI는 없지만
  32. UI에 방해되어서는 안 되는 작업을
  33. 실행하고 있을 수도 있습니다
  34. 예를 들어 자동차 네비게이션을
    수행하는 도중에
  35. 음악을 재생할 수도 있는데
    그때 서버는
  36. startForeground를 호출해서
    foreground에서 돌아가고 있고
  37. 이런 호출은 notification을
  38. 필요로 한다는 걸 알 수 있죠
  39. 이것은 서비스가 중지되거나
    stopForeground를 호출할 때까지
  40. 표시되거나 dismiss될 수도 있습니다
    notification에 대해서는
  41. 조금 후에 Dan과 배울 겁니다
    하지만 지금은 foreground 서비스가
  42. foreground activity와
    같은 우선순위로 실행된다는 것을
  43. 기억하세요, 그렇게 되면
    run time이
  44. 리소스를 확보하기 위해
    종료하는 것이 거의 불가능하죠
  45. life cycle을 배우면
    많은 문제를 피해갈 수 있고
  46. long running이나 foreground서비스를
    생성하는 것만 하면 된다고
  47. 생각하실지도 모르겠습니다만
    저는 호주의 해안가에서 자랐는데
  48. 해류 반대방향으로 수영하는 것은
  49. 힘들기만 하고 쓸모없는 일이라는
    걸 알고 있지요
  50. 이 경우에는 시스템이
    리소스를 관리하는 걸
  51. 더 어렵게만 만들고
    사용자 경험을 악화시킬 뿐입니다
  52. 해류와 같은 방향으로 수영하세요
  53. foreground 서비스는
    꼭 필요할 때만 사용하시고요
  54. 가능한 빨리 모든 서비스를
    중지시키세요
  55. activity와 receiver와 같이
    서비스도
  56. main thread에서 실행됩니다
  57. 그래서 서비스 내에서
    long running task로
  58. 실행시키고자 하는 작업을
    background thread로
  59. 처리할 수 있습니다
    문제를 쉽게 만들기 위해
  60. internet service class를 이용할 수 있습니다
    그것은 제일 흔하고 좋은 practice패턴을
  61. 시행하는데요, 서비스 내에서 실행되는
  62. intent를 이용합니다
    들어오는 intent의 목록을 만들고
  63. start service가 호출될 때
    넘어 들어옵니다
  64. 그것들은 background thread에서
    차례대로 처리되고
  65. intent service implementation의
    onHandleIntent handler안에서 처리되죠
  66. 목록이 비어있을 때
    서비스 자체는 새로운 intent가
  67. 받아지고 프로세스가
    시작할 때까지 종료됩니다
  68. 서비스는 강력한 툴입니다
    사용하는 것을
  69. 배우는 것도 중요하지만
    현실적으로 framework를 통해
  70. 자기만의 service implementation을
  71. 실행하는 방법도 종종 있습니다
    백그라운드 작업을 실행할
  72. intent service이든 싱크 어댑터든 간에
    다음 시간에 배울 겁니다
  73. 백그라운드 데이터 싱크에
    딱 맞는 것들이죠