ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] 안드로이드 면접 질문 정리
    Android 2020. 11. 10. 15:59
    반응형

    안드로이드의 4대 컴포넌트가 무엇인가요?

    안드로이드 어플리케이션을 만들때 주요 구성요소로,

    액티비티, 서비스, 콘텐트 프로바이더, 브로드캐스트 리시버가 있습니다.

     

    액티비티와 액티비티의 생명주기에 대해 설명해보세요.

    액티비티는 화면 UI를 담당하는 컴포넌트로, 안드로이드 어플리케이션은 반드시 1개 이상의 액티비티를 갖고 있습니다.

    두개 이상의 액티비티를 띄울 수 없고 뷰나 프레그먼트를 이용해 화면을 분할할 수 있습니다.

    안드로이드에서 액티비티 클래스는 슈퍼클래스인 Activity를 상속받아 사용합니다.

    액티비티는 생성부터 소멸까지 일정한 주기를 갖는데 이를 액티비티의 생명주기라고 하고, 각 상태에 따른 메소드를 호출합니다.

    기본적으로 생성부터 소멸까지 onCreate, onStart, onResume, onPause, onStop, onDestroy의 순서로 호출됩니다.

     

    다른 액티비티가 실행되면 생명주기는 어떻게 되나요?

    다른 액티비티가 실행되어 전체 화면을 가리는 상태가 되면 액티비티는 정지 상태가 되며 onPause, onStop을 차례로 호출합니다. onStop이 호출된 액티비티, 즉 정지 상태의 액티비티는 백스택에 들어가게됩니다.

    뒤로가기를 통해 다시 실행할 경우 onRestart, onStart, onResume을 통해 재실행하게 됩니다.

     

    다이얼로그가 실행되면 실행주기가 어떻게 되나요?

    다이얼로그같이 화면을 일부분 가리는 상태가 되면 액티비티는 onPause를 통해 일시정지 상태로 들어가고, 다이얼로그를 종료하면 onResume으로 다시 실행상태로 들어갑니다.

    ⇒ 확인 필요ㅠㅠ

     

    홈/화면 잠금 버튼을 누른다면 생명주기는 어떻게 변경되나요?

    다른 액티비티 실행과 동일하다.

    onPause() > onStop() 순으로 호출

    화면 켜기 혹은 액티비티 재실행시 onRestart() > onStart() > onResume() 순으로 호출

     

    화면 전환시에 대한 생명주기는 어떻게 되나요?

    화면 전환시에는 소멸 후에 다시 액티비티가 생성되는데 즉, onStop, onDestroy 후에 onCreate, onStart, onResume을 호출하게됩니다.

     

    화면 전환 시 데이터는 어떻게 될까요?

    별도의 데이터베이스에 저장하지 않았다면 리셋될 것입니다. 따라서 데이터를 유지하기 위해서는 별도로 데이터를 저장해 주어야하는데, onPause직전에 호출되는 onSaveInstanceState메소드를 통해 저장하고자 하는 데이터를 번들에 담을 수 있습니다. 그리고 onCreate에서 savedInstanceState에서 해당하는 데이터를 받아올 수 있습니다.

    혹은 AAC의 뷰모델을 사용하면 데이터를 유지할 수 있습니다.

     

    번들은 무엇인가요?

    여러가지 타입의 값을 저장하는 Map클래스입니다.

     

    프래그먼트란 무엇인가요?

    프래그먼트는 액티비티를 분할하여 UI구성을 할 수 있도록 도입된 기능으로, 자체 수명 주기와 입력 이벤트를 가질 수 있습니다.

     

    서비스란?

    백그라운드에서 실행되는 프로세스로, UI가 존재하지 않습니다.

    startService와 bindService 두가지로 서비스를 실행할 수 있습니다.

    startService는 백그라운드에서 종료시키거나 메모리 부족으로 종료되기 전까지 무한적으로 동작하며 결과를 반환하지 않습니다.

    bindService는 바인딩된 컴포넌트에서만 동작하며 결과를 반환하는 등 상호작용을 할 수 있습니다.

     

    그럼 서비스는 별도의 스레드에서 동작하나요?

    아닙니다. 서비스는 백그라운드에서 실행될 수 있는 구성요소로 기본적으로 메인스레드에서 실행됩니다. 별로도 작업을 수행해야한다면 서비스 내부에서 새로운 스레드를 생성해 주어야합니다.

     

    컨텐트 프로바이더란?

    컨텐트 프로바이더는 앱과 앱저장소 사이에서 데이터 접근 및 관리를 도와주는 컴포넌트

     

    브로드캐스트 리시버란?

    안드로이드는 전화, 문자와 같은 기기의 이벤트에 대한 알림을 수신하는 컴포넌트입니다.

     

    인텐트는 무엇인가요?

    컴포넌트를 실행 시키거나 컴포넌트간 데이터 전달을 하는 데 사용됩니다.

     

    context란 무엇인가요?

    어플리케이션에 대한 정보에 접근할 수 있는 인터페이스입니다. 

    추상 클래스로써 실제 구현은 안드로이드 시스템에 의해 제공됩니다. 

    컨텍스트를 통해 어플리케이션에 특화된 리소스나 클래스에 접근할 수 있고, 

    엑티비티 실행, 인텐트 브로드캐스팅, 인텐트 수신과 같은 응용 프로그래밍수준의 작업을 수행하기 위한 API를 호출할 수 있습니다.

     

    HTTP 통신을 메인스레드에서 하면 안되는 이유?

    안드로이드는 기본적으로 메인스레드는 UI스레드로서,

    처리시간이 오래 걸리는 작업을 메인스레드에서 하게 되어 대기할 경우 ANR이 발생합니다.

     

    ANR은 무엇인가요?

    Application Not Responding으로 UI스레드가 오랫동안 작업을 하거나 차단되면 어플리케이션 응답없음이라는 오류가 발생하고 어플리케이션을 종료시키게 됩니다.

     

    리사이클러뷰가 리스트뷰보다 좋은 점이 무엇인가요?

    이름처럼 재활용이 가능한 뷰로 사용자가 스크롤을 할때 안보이는 뷰 객체를 재사용할 수 있습니다.

    즉, 처음에 보이는 뷰 개수만큼만 생성해서 사용할 수 있습니다.

    무한대로 스크롤할 경우 뷰 객체를 무한대로 생성해야하는 단점을 보완할 수 있습니다.

     

    뷰홀더란 무엇인가요?

    뷰홀더는 뷰를 보관하는 홀더 객체입니다.

    어댑터에서 처음 화면에 보이는 만큼 뷰홀더를 생성합니다.

    그리고 스크롤 되면 보이지 않게 된 뷰홀더에 새로운 데이터를 바인딩하여 재사용하게 됩니다.

     

    리사이클러뷰 구현은 어떻게 하나요?

    리사이클러뷰를 구현하기 위해서는 뷰홀더, 어댑터, 레이아웃 매니저가 필요합니다.

    먼저 뷰를 보관할 뷰홀더 클래스를 구현합니다.  

    리사이클러뷰 어댑터를 상속받은 어댑터는 데이터 리스트를 갖고 있고, 세가지 메소드를 구현합니다. 

    onCreateViewHolder 뷰홀더 객체를 생성하는 메소드로, 맨처음 보이는 뷰홀더만큼 호출되어 뷰홀더를 생성합니다.

    onBindViewHolder 그리고 스크롤되어 뷰홀더가 보여질때 새로운 데이터와 바인딩해줍니다.

    getItemCount메소드는 데이터 개수를 반환합니다.

    그리고 레이아웃매니저를 통해 리사이클러뷰가 어떤 방식으로 뷰를 보여줄지 정의합니다.

     

    inflate란?

    xml에 있는 뷰의 레이아웃을 실제 뷰 객체로 만드는 역할을 수행합니다.

     

    매니 페스트 파일에 대해 설명해보세요.

    매니페스트 파일은 앱의 이름, 버전, 구성요소, 권한등 앱의 실행에서 꼭 필요한 정보가 저장되어 있는 파일입니다.

    xml파일로 프로젝트의 최상위에 존재합니다.

    댓글