알듯 말듯한 안드로이드의 컴포넌트들

컴포넌트(Component)

  • 액티비티, 서비스, 브로드캐스트 리시버, 컨텐츠 프로바이더를 안드로이드 4대 컴포넌트라 합니다.
  • 4대 컴포넌트 중 컨텐츠 프로바이더는 인텐트로 실행하지 않습니다.
  • 4대 컴포넌트 중 브로드캐스트 리시버는 AndroidManifest.xml에 등록하지 않고도 사용할 수 있으며, 이를 동적 브로드캐스트 리시버라 부릅니다.
  • 동적 브로드캐스트 리시버는 선택이 아닌 필수로, 동적 브로드캐스트 리시버를 통해서만 수신할 수 있는 브로드캐스트가 있습니다.
  • 4대 컴포넌트 중 가장 많이 쓰이는 것은 액티비티지만, 중요한 기능들은 모두 서비스에 기반합니다.
  • 액티비티는 포그라운드 작업(주로, UI), 서비스는 백그라운드 작업에 적합하다 설명하지만, 액티비티와 마찬가지로 서비스 메인 스레드(일명, UI 스레드)에서 동작하기 때문에 시간이 오래 걸리는 작업은 스레드를 따로 만들어서 처리하지 않으면 ANR을 발생시킵니다. 액티비티와 서비스는 라이프 사이클이 다르고, UI의 유무 정도의 차이가 있다고 보는 것이 옳습니다.

프레그먼트(Fragment)

  • 라이프사이클에 따라 올바르게 돌아가는 프레그먼트를 최소한의 코드로 구현하겠다면 onCreate(), onCreateView(), onPause()만 사용하면 됩니다.
  • 복구할 필요가 없다면, onCreate()와 onCreateView()만 만들어도 됩니다.
  • 프레그먼트가 꼭 UI를 가질 필요는 없습니다. 그러므로, 프레그먼트를 화면이 필요하지 않은 액티비티의 동작을 처리하는데 쓸 수 있습니다. 프레그먼트를 add()할 때 컨테이너를 지정하지 않으면 프레그먼트의 라이프 사이클 메소드 중 onCreateView()에 container가 전달되지 않습니다.
  • Fragment의 라이프 사이클을 체크하는 메소드들이 많습니다. 그 중에서 isAdded()는 onCreate()가 호출된 후, isVisible()은 onCreateView() 호출 후 true가 반환됩니다. 그러므로, 반대로 생각하면 UI를 가지지 않은 프레그먼트는 isVisible()이 항상 false가 됩니다.
  • 프레그먼트의 onCreate()메소드에서 setHasOptionsMenu()에 true를 전달하지 않으면 onCreateOptionsMenu()메소드가 호출되지 않습니다.
    액티비티처럼 프레그먼트도 액티비티의 상단 우측에 메뉴를 추가할 수 있습니다. 단, 액티비티와 달리 onCreate()에서 setHasOptionsMenu(true)를 호출해주어야 onCreateOptionsMenu()메소드가 호출되어 메뉴를 추가 할 수 있게됩니다.
  • 메뉴의 이벤트는 액티비티가 가장 먼저받은 후 프레그먼트에 전달됩니다. 만약, 액티비티에서 메뉴 이벤트를 소비해버리면 프레그먼트는 이벤트를 받지 않습니다.
    사용자가 메뉴를 눌렀을 때 이벤트는 액티비티 – 프레그먼트 순으로 전달됩니다. 만약, 액티비티에서 이벤트 처리 후, return true;를 해버리면 프레그먼트의 onOptionsItemSelected() 메소드로 이벤트가 들어오지 않습니다. 그러므로, 프레그먼트에서 소비할 수 있는 기회를 주려면 액티비티에서 return false;를 해주어야 합니다.

2 thoughts on “알듯 말듯한 안드로이드의 컴포넌트들”

댓글 남기기

이메일은 공개되지 않습니다.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.