본문 바로가기

분류 전체보기134

13-5 액티비티 ANR 문제와 코루틴 ANR 문제란? 액티비티 컴포넌트에서 마지막으로 다룰 주제는 ANR이다. ANR(activiy not response)은 액티비티가 응답하지 않는 오류 상황을 의미한다. 액티비티를 작성할 때 ANR을 고려하지 않으면 앱이 수시로 종료될 수 있다. 시스템에서 액티비티를 실행하는 수행 흐름을 메인 스레드 또는 화면을 출력하는 수행 흐름이라는 의미에서 UI 스레드라고 한다. 메인 스레드가 오래 걸리는 작업을 실행한다고 그 자체로 오류가 생기는 건 아니지만, 사용자가 액티비티 화면을 터치하는 등 이벤트가 발생하면 오류가 생길 수 있으므로 액티비티를 작성할 때 항상 ANR 오류를 고려해야 한다. 액티비티에서 시간이 오래 걸리는 대표적인 작업은 서버와 통신하는 네트워크이다. 정상적인 상황에서는 서버와 연결하여 데이.. 2023. 7. 1.
13-4 태스크 관리 태스크(task) 관리란 액티비티를 어떻게 생성하고 관리하는지를 제어하는 일을 의미한다. 시스템에는 액티비티의 태스크를 유지하는 기본 규칙이 있으며 일반적으로는 이 기본 규칙을 그대로 이용하지만 특정한 상황에서 개발자가 액티비티의 태스크를 관리해야 한다면 설정을 추가할 수도 있다. 시스템에서 태스크 관리 액티비티 태스크란? 앱이 실행될 때 시스템에서 액티비티의 각종 정보를 저장하는 공간 A 앱이 A_OneActivitiy, A_TwoActivity 두 액티비티로 구성되어있다고 가정하자. 사용자가 앱을 실행해 A_OneActivity 화면이 나오고 다시 A_OneActivity에서 인텐트로 A_TwoActivity를 실행했다고 생각해보자. 그러면 액티비티 객체가 2개가 생성되고 시스템은 이 액티비티가 실행.. 2023. 7. 1.
13-3 액티비티 제어 소프트 키보드 제어하기 시스템에서 제공하는 키보드(소프트 키보드)는 액티비티 화면에서 사용자가 글을 입력할 수 있는 뷰가 포커스를 가지는 순간 자동으로 올라온다. 그리고 사용자가 뒤로가기 버튼을 누르면 뷰가 자동으로 사라진다. 입력 매니저 그런데 때로는 코드에서 특정한 순간에 키보드를 올리거나 내려야 할 수도 있다. 이를 InputMethodManager 클래스가 지원한다. public boolean hideSoftInputFromWindow(IBinder windowToken, int flags) public boolean showSoftInput(View view, int flags) public void toggleSoftInput(int showFlags, int hideFlags) InputMe.. 2023. 7. 1.
13-2 액티비티 생명주기 액티비티의 상태 액티비티의 생명주기를 이해하고 각 상황에 적절하게 대처할 수 있어야 한다. 생명주기(life cycle)이란 액티비티가 생성되어 소멸하기까지의 과정을 말하며, Activity 클래스는 액티비티가 상태 변화를 알아차릴 수 있는 여러가지 콜백 함수를 제공한다. 이 콜백 함수에 액티비티의 상태가 바뀔 때마다 앱이 어떻게 동작해야 하는지를 구현한다. 액티비티의 상태는 다음처럼 크게 3가지로 구분할 수 있다. 활성: 액티비티 화면이 출력되고 있고 사용자가 이벤트를 발생시킬 수 있는 상태 일시 정지: 액티비티의 화면이 출력되고 있지만 사용자가 이벤트를 발생시킬 수 없는 상태 비활성: 액티비티의 화면이 출력되고 있지 않는 상태 활성 상태 액티비티가 실행되어 화면에 나오고 사용자 이벤트를 처리할 수 있.. 2023. 7. 1.
13-1 인텐트 이해하기 01-02장 안드로이드 앱 개발 준비하기 03-05장 코틀린 이해하기 06-10장 앱의 기본 기능 구현하기 11-12장 구글의 라이브러리로 화면 구성하기를 거쳐왔다. 13~16장에서는 컴포넌트를 다룰 것이다. 안드로이드 앱은 액티비티, 브로드캐스트 리시버, 서비스, 콘텐츠 프로바이더 등 4개의 컴포넌트를 기반으로 개발한다. 지금까지 살펴본 액티비티를 제대로 개발하려면 인텐트의 원리와 액티비티의 생명 주기를 이해해야 한다. 그리고 액티비티 이외에 나머지 컴포넌트도 알아야 한다. 컴포넌트 작성 방법과 동작 원리를 알아볼 것이다. 13장의 주제는 액티비티이다. 액티비티는 안드로이드 앱에서 화면을 구성하는 컴포넌트이다. 액티비티의 화면 구성 방법 이외에 동작 방식 등을 구체적으로 알아야 제대로 액티비티를 이해하.. 2023. 6. 30.
12-4 확장된 플로팅 액션 버튼 확장된 플로팅 액션 버튼(ExtendedfloatingActionButton)은 화면에 떠 있는 듯한 버튼을 제공하는 뷰이다. 머티리얼 라이브러리가 처음 나왔을 때는 플로팅 액션 버튼(FloatingActionButton)을 제공했지만, 지금은 버튼에 문자열까지 출력할 수 있는 확장된 플로팅 액션 버튼도 제공한다. // 확장된 플로팅 액션 버튼 // 아이콘 지정 확장된 플로팅 액션 버튼의 icon 속성으로 이미지를 지정하면 이 이미지를 포함해 화면에 떠 있는 듯한 버튼이 출력된다. 그리고 text 속성으로 문자열을 지정하면 이미지와 함께 출력된다. 만약 text 속성을 지정하지 않고 icon 속성만 지정하면 둥근 모양으로 나온다. 그리고 코드에서 문장까지 나오게 확장하거나 아이콘만 나오게 축소하는 등 버.. 2023. 6. 30.
12-3 내비게이션 뷰 - 드로어 화면 구성 11장에서 androidx 라이브러리의 드로어 레이아웃을 살펴봤다. 처음엔 안 보이던 화면이 옆에서 끌려 나오면서 출력되는 기능이다. 이때 끌려나오는 화면을 어떻게 구성할지는 개발자 마음인데 대부분 앱에서는 다음과 같이 구성한다. (책 이미지) 화면의 위쪽은 아이콘과 문자열 등을 배치했고 아래쪽은 메뉴항목을 나열했다. 만약 이런 모양으로 출력하려면 내비게이션 뷰(NavigationView)를 이용해야 한다. 내비게이션 뷰는 드로어 레이아웃으로 열린 화면에 출력되는 내용을 구성할 때 사용하는데, 보통은 메뉴 항목을 나열하는 형태로 구성한다.(androidx 라이브러리의 드로어 레이아웃은 드로어 화면이라는 '기능'을 담당하고 내비게이션 뷰는 그 화면의 '구성'을 담당한다. 12장의 머티리얼 라이브러리는 '디.. 2023. 6. 30.
12-2 탭 레이아웃 - 탭 버튼 구성 탭 레이아웃은 탭(tab)으로 구분하는 화면에서 탭 버튼을 배치하는 레이아웃이다. 탭 버튼을 다양하게 표시하고자 사용하는 뷰이다. 구글 플레이 스토어를 들어가보면 탭이 적으면 그냥 나열되는데 탭이 많으면 옆으로 스크롤 해서 볼 수 있다. 탭 버튼이 많으면 이처럼 스크롤되게 제공해야 한다. 탭버튼을 가로등분으로 제공할수도 있다. 이런 설정들을 탭 레이아웃을 통해 출력한다. // 탭 레이아웃 등록 위 코드는 탭 화면을 만드는 레이아웃 XML 파일이다. TabLayout과 FrameLayout을 선언했다. 사용자가 TabLayout으로 구성한 탭 버튼을 선택하면 FrameLayout 위치에 탭의 내용을 출력한다. // 코드에서 탭 버튼 정의 val tab1: TabLayout.Tab = tabLayout.ne.. 2023. 6. 30.
12-1 앱바 사용하기 머티리얼 디자인은 구글의 디자인 지침이다. 그리고 이 디자인 지침에 맞게 앱을 만드는 여러가지 뷰를 라이브러리로 제공한다. 12장에서는 머티리얼 라이브러리에서 자주 사용하는 앱바 레이아웃, 탭 레이아웃, 내비게이션 뷰, 확장된 플로팅 액션 버튼 등을 소개한다. 상용 수준의 앱을 개발하고자 한다면 11장에서 살펴본 제트팩의 androidx와 마찬가지로 머티리얼 라이브러리도 잘 정리해둬야 한다. 머티리얼 라이브러리란? 구글의 머티리얼 디자인(material design)은 모바일과 데스크톱, 그리고 그 밖에 다양한 장치를 아우르는 일관된 애플리케이션 디자인 지침이다.(androidx는 기능 위주고 머티리얼은 디자인 중점인듯) 그림자 효과나 물결 모양 효과 등 다양한 뷰를 필요로 하는 효과들을 구현할 수 있도.. 2023. 6. 30.
11-6 드로어 레이아웃 - 옆에서 열리는 화면 구성 드로어 레이아웃(DrawerLayout)은 액티비티 화면에 보이지 않던 내용이 왼쪽이나 오른쪽에서 손가락의 움직임에 따라 밀려나오는 기능을 한다. androidx의 라이브러리인 드로어 레이아웃은 마치 서랍(drawer)처럼 열리는 메뉴를 구성할 때 사용한다. ex. 카카오맵(지금은 업뎃돼서 바뀌었나?) 화면 왼쪽을 탭해서 오른쪽으로 밀면 목록으로 구현된 화면이 나온다. 더보기 (개정판 삭제) 드로어 레이아웃을 사용하려면 그래들 파일의 dependencies 항목에 다음처럼 선언해야 한다. // 드로어 레이아웃 선언 implementation 'androidx.drawerlayout:drawerlayout:1.1.1' 드로어 레이아웃을 액티비티에 적용하려면 액티비티의 레이아웃 XML 파일 구성이 중요하다... 2023. 6. 29.