티스토리 뷰

Q > RecyclerView를 사용한 이유?

A > Listview의 경우 새롭게 리스트 항목을 렌더링 할때마다 레이아웃을 인플레이트 해야 하며 인플레이트 된 뷰를 findviewbyid로 찾아야 합니다. 그런데 이 두 과정이 메모리와 성능에 악영향을 미치기 때문에 이것을 해결하기 위해 RecyclerView를 사용합니다.

리싸이클러뷰를 사용하면 레이아웃을 매번 새롭게 인플레이트 하지 않고 기존에 있던것을 재활용하게 됩니다. 그리고 뷰 홀더 패턴을 강제하기 때문에 한번 찾아 놓은 뷰를 계속해서 재활용 할 수 있습니다.


Q > 레이아웃 인플레이트란 무엇이죠?

A > xml 레이아웃 파일에 존재하는 뷰들을 메모리 상으로 로드하는 과정을 의미합니다. 인플레이트 된 뷰들은 findviewbyid메소드를 통해 참조를 얻을 수 있습니다.


Q > 뷰 홀더 패턴이 뭐죠?

A > 뷰 홀더 패턴이란 인플레이트 된 뷰를 계속해서 findviewbyid를 통해 찾는게 아니라 한번 찾아 놓고 그 객체의 참조를 어댑터 클래스의 내부 클래스로 저장해놓는 방식을 말합니다. 이렇게 객체를 보관해두면 딱 한번만 findviewbyid를 사용하면 되기 때문에 성능 저하를 막을 수 있습니다.


Q > 앱을 켠 상태로 화면을 전환하면 무슨일이 일어나는가?

A > 강제 종료가 일어납니다. 강제 종료가 일어나면 Oncreate, onstart, onresume이 차례대로 실행되어 다시 실행 상태가 됩니다. 앱이 강제종료 되든 정상 종료 되든 무조건 onpause는 거치기 때문에 이 생명주기가 정보를 저장할 마지막 기회입니다. onpause에서 sharedpreference를 통해 정보를 저장했다가 oncreate에서 복구를 하는 방법이 있고, 강제 종료가 일어나기 전에 호출 되는 onsaveinstancestate 콜백 메소드에서 번들에 정보를 저장해 놨다가 oncreate에서 복구하든 강제종료 전 값을 보관할 방법을 구현해야 합니다.


Q > 안드로이드의 4대 컴포넌트에는 어떤것들이 있나요? 그것들에 대해 간단히 설명해주세요.

A > 액티비티, 서비스, 브로드캐스트 리시버, 컨텐트 프로바이더가 있습니다. 액티비티는 안드로이드의 화면을 관리하며 사용자가 발생시키는 여러 이벤트를 처리하는 역할을 담당합니다. 브로드캐스트 리시버는 안드로이드 시스템에서 발생하는 브로드캐스팅 메세지를 처리하는 역할을 담당합니다. 컨텐트 프로바이더는 서로 다른 앱 간 데이터를 공유하기 위해서 사용합니다. 서비스는 백그라운드에서 어떤 작업을 실행시키기 위해서 사용합니다.


Q > 인텐트가 무엇이며, 어떤 종류가 있는지 설명해보세요.

A > 인텐트란 안드로이드의 컴포넌트들 끼리 통신을 위한 메세징 시스템입니다. 암시적 인텐트와 명시적 인텐트가 있습니다.


Q > 암시적 인텐트에 대해서 설명해보세요.

A > 암시적 인텐트란 호출 대상을 정확히 명시하지 않은 인텐트입니다. 주로 다른 앱의 컴포넌트를 호출 할 때 사용하며 매니페스트 파일의 컴포넌트의 인텐트 필터 부분과 인텐트에 적힌 정보를 비교하여 호출 컴포넌트를 찾습니다.




Q > 명시적 인텐트에 대해서 설명해보세요.

A > 명시적 인텐트란 호출 컴포넌트가 정확히 명시된 인텐트 입니다. 주로 같은 앱 내의 다른 컴포넌트를 호출 할 때 사용합니다.


Q > 액티비티의 3가지 상태가 무엇인지 액티비티 스택과 관련하여 설명해주세요.

A > 액티비티가 화면에 직접적으로 보여지는 상태가 Running 상태 입니다. 이 상태에서는 포커싱을 받은 상태이며 사용자로부터 입력을 받을 수 있습니다. 액티비티 스택에서 최상위에 위치합니다. 그 다음으로 Paused상태가 있습니다. 이 상태는 다른 화면에 의해 일부 화면이 가려진 상태 입니다. 액티비티가 여전히 실행중이긴 하지만 최상위에 있는 액티비티 바로 밑에 존재합니다.

마지막으로 Stopped 상태입니다. 다른 화면에 의해 액티비티가 완전히 가려진 상태이지만 여전히 실행 상태이긴 합니다. 마찬가지로 액티비티 스택에도 존재하긴 합니다.


Q > 프래그먼트에 대해서 설명하고 장점이 무엇인가요?

A > 예전에는 액티비티를 통해서 화면을 관리했습니다. 하지만 태블릿이 등장하고 나서 UI가 굉장히 복잡해졌고 액티비티만으로는 구현하기 어려워서 프래그먼트라는것이 탄생했습니다. 이 프래그먼트라는것은 재사용이 가능한 UI 모듈입니다. 프래그먼트 매니저라는 클래스에 의해서 관리되며 액티비티 위에서 프래그먼트 매니저에 의해 화면이 전환 되기 때문에 매우 가볍습니다. 액티비티의 경우에는 안드로이드 시스템의 액티비티 매니저를 인텐트를 통해 거쳐야 하기 때문에 무겁습니다. 바로 이런점이 프래그먼트의 장점이라고 할 수 있습니다.


Q > DP단위에 대해서 설명해보세요.

A > DP를 설명하기 전에 먼저 DPI를 설명하겠습니다. DPi란 1인치에 들어가있는 점의 개수를 의미합니다. DP란 DIP의 줄임말인데 밀도 독립 픽셀이라는 의미입니다. 즉 해상도가 얼마냐에 따라 크기가 달라지는게 아니라 고정됩니다. 160DPI에서의 1픽셀이 1DP의 기준입니다. 즉, 1인치에 160픽셀이 들어가는 해상도에서 1픽셀을 1DP의 기준으로 잡습니다. 그렇기 때문에 320DPI에서의 1DP는 2픽셀이 되는것입니다. 


Q > 안드로이드의 메모리 관리 방식에 대해서 설명하시오.

A > 안드로이드는 액티비티, 서비스, 리시버, 프로바이더를 실행하기 위해 앱이 실행되는 과정에서 프로세스를 생성합니다. 실행중인 모든 앱은 컴포넌트가 모두 종료되어도 다음에 이 앱을 다시 실행할 가능성이 높기 때문에 프로세스를 바로 제거하지 않습니다. 바로 종료하지 않는 이유는 앱을 실행하기 위해 프로세스를 생성하는 과정에서 딜레이가 발생하는데 이 딜레이를 줄이기 위함입니다. 따라서 사용자에 의해 다시 앱이 실행되면 남아있던 프로세스가 존재하는 경우 바로 실행됩니다. 이 과정에서 쌓여있던 많은 프로세스로 인해 메모리가 부족해지는 경우 프로세스의 우선순위(사용빈도)에 따라 프로세스를 종료하여 메모리를 확보합니다.







댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함