1. 서비스에 대해서 설명해주세요
> 서비스는 보통 백그라운드에서 오랜시간 동안 수행될 때 적합한 어플리케이션 컴포넌트 이다. 그리고 유저 인터페이스를 제공하지 않는다. 심지어 유저가 해당 어플리케이션과 상호작용하고 있지 않을 때도 말이다. 서비스는 3가지 타입이 있다.
Foreground Service : 포그라운드 서비스는 유저에게 알림을 줄 수 있는 명령을 수행한다 예를 들어 우리는 음악을 실행하기 위해서 포그라운드 서비스를 사용할 수 있고 사용자에게 알림을 표시해주어야 한다.
Background Service : 백그라운드 서비스는 유저에게 직접적으로 알림을 주지 않는 서비스를 수행한다. 안드로이드 API 26 레벨 이상에서는 백그라운드 서비스를 사용하는 것이 금지 되었다. 그래서 이런 작업들에는 WorkManager 를 사용해야 한다.
Bound service : 바운드 서비스는 bindService() 메소드를 호출함으로써, 어플리케이션 컴포넌트에 바인딩 되는 서비스이다. 바운드 서비스는 요청을 보내거나, 결과를 받는 클라이언트-서버 인터페이스가 제공된다. 또한 다른 어플리케이션 컴포넌트에 바운드 되어 있는 경우에만 실행된다.
참고 > https://developer.android.com/guide/components/services?hl=ko
2. 서비스와 인텐트 서비스의 다른점은 무엇인가요 ?
> 서비스는 안드로이드 서비스를 위한 기초(Base) 클래스이다. 그래서 어떤한 서비스로도 확장되거나, 만들어질 수 있다. 서비스를 직접적으로 상속받은 클래스는 기본적으로 메인 스레드에서 실행되기 때문에 UI를 Block 할 수 있다. 그래서 비교적 간단한 태스크를 수행하거나, 무거운 작업을 하게 될 경우에는 다른 스레드를 만들어 사용해야한다.
인텐트 서비스는 서비스의 하위 클래스 이다. "인텐트" 라고 불리는 비동기 요청을 처리하는 서비스이다. 클라이언트는 startService() 메소드를 통해 요청을 보낸다. 인텐트 서비스는 필요에 따라 실행되며, 워커 스레드를 사용하여 각각의 인텐트가 처리된다. 작업을 모두 수행하면, 종료한다.
3. Thread 와 AsyncTask 의 다른점은 무엇인가?
> 스레드가 수행되기 위해서는, 메인 스레드에서 분리하여 실행된다. 그러나 스레드를 취소하는 것은 우아하게(elegantly) 되지 않는 경우가 많고, 안드로이드 설정이 변경되는 것을 처리할 수 없다. 또한 스레드에서는 UI를 변경할 수 없다. 자바의 메소드이다.
AsyncTask 는 5ms 보다도 짧은 작업을 처리 할 수 있다. 또한 스레드와는 다르게 UI를 업데이트 할 수 있는 부분이 있다. 하지만 무겁고 다양한 작업들을 수행한다면 퍼포먼스는 저하된다. 안드로이드 라이브러리에 있는 메소드이다.
4. 핸들러란 무엇인가?
> 핸들러는 스레드를 관리하기 위한 객체이다. 핸들러는 메세지를 받거나 처리하는 방법을 정의할 수 있다. 그들을 액티비티 라이프사이클 외에서 사용할 때에는 사용한 뒤 적절히 해제(Cleaned up) 시켜줘야 한다. 그렇지 않으면 메모리 누수(thread leaks)가 발생할 것 이다.
핸들러는 메인스레드와 백그라운드 스레드 혹은 백그라운드 스레드 사이의 커뮤니케이션을 가능하게 한다.
핸들러는 몇초나 몇분 단위로 정기적으로 해야하는 백그라운드 작업을 수행하는데 선호된다.
5. Job Scheduling 이란 무엇인가요?
> 안드로이드 L 에서 추가된 Job scheduling api 는 이름에서 느껴지는 그대로, 메모리 최적화, 배터리 소모량, 연결성 조건(connectivity condition)에 대한 작업을 할 수 있게한다. 또한 작업들의 일괄적으로 작업할 수 있는 배치 기능을 제공한다. 안드로이드 시스템은 작업들을 결합하여, 배터리 소모를 줄 일 수 있다. (가령 와이파이가 연결 되었을 때만 파일 업로드/다운로드 등)
몇가지 예시를 들자면,
- 디바이스의 배터리에 전원이 공급중 일 때
- 네트워크 연결이나 와이파이의 연결이 필수 일 때
- 중요하지 않거나, 사용자 직접적으로 개입하는 작업이 아닌 경우
- 중요하지 않지만, 주기적인 배치 작업을 실행하는 경우
6. Activity와 AsyncTask 의 라이프 사이클이 어떤 관계이 있나요? 어떤 문제가 결과적으로 발생할 수 있나요 ? 그리고 어떻게 문제를 회피할 수 있을 까요 ?
7. onTrimMemory 메소드는 무엇인가요?
8. Android Bound Service란 무엇인가요?
9. AIDL 과 Messenger Queue 를 비교하여 말해보세요.
10. ThreadPool 이란 무엇인가요 ? 몇개의 분리된 스레드에서 사용할 때 효율적으로 하는 방법은 무엇일까요 ?
11. Serializable 과 Parcelable 에 대해 비교하며 설명해주세요.
'Android > Interview Question' 카테고리의 다른 글
안드로이드 면접 질문 6 (0) | 2019.11.05 |
---|---|
안드로이드 면접 질문 5 (1) | 2019.11.05 |
안드로이드 면접 질문 4 (0) | 2019.11.05 |
안드로이드 면접 질문 2 (0) | 2019.10.31 |
안드로이드 면접 질문 1 (3) | 2019.10.29 |