2023-11-06 임베디드S/W 설계 Lec. 8 – 액티비티와 인텐트 목차 1. 2. 3. 4. 5. 6. 7. 액티비티 관련 개념 인텐트 개요 명시적 인텐트 액티비티로부터 결과 받기 암시적 인텐트 액티비티 생애주기 액티비티 상태 저장 2 1 2023-11-06 1. 액티비티 관련 개념 애플리케이션(application) 액티비티(activity) 액티비티 스택(activity stack) 또는 백스택 (back stack) 태스크(task) 3 1. 액티비티 관련 개념 액티비티와 애플리케이션 액티비티 사용자가 어떤 작업을 할 수 있는 화면을 가지고 있는 애플리케이션의 구성 요소 안드로이드에서 실행의 단위 앱 실행 첫 번째 액티비티 실행 사용자 선택에 따라 다른 액티비티 실행 startActivity()호출하여 다른 액티비티 시작 애플리케이션 한 개 이상의 액티비티들로 구성 4 2 2023-11-06 1. 액티비티 관련 개념 태스크와 액티비티 스택 태스크 어떤 작업을 수행하기 위하여 사용자가 상호작용하는 액티비티들의 그룹 사용자가 실행한 앱 이외의 다른 앱의 액티비티도 동일한 태스크에 유지시킴 액티비티 스택 앱에서 Back 버튼 터치 현재 액티비티 종료 후 이전 액티비티로 돌아감 사용자가 실행하였던 액티비티들의 정보 저장해야 함 새로운 액티비티가 시작될 때마다 액티비티 스택에 추가 5 1. 액티비티 관련 개념 멀티태스킹 동시에 여러 태스크를 실행 현재의 태스크를 배경(background)으로 보내고 다른 태스크를 전경 (foreground)에서 시작할 수 있음 6 3 2023-11-06 1. 액티비티 관련 개념 멀티태스킹 예 7 1. 액티비티 관련 개념 오버뷰 화면 최근에 사용된 액티비티들과 태스크들 보여줌 8 4 2023-11-06 2. 인텐트 개요 액티비티 전환 인텐트 다른 액티비티 실행에 필요한 여러 가지 정보들을 보내주어야 함 필요 정보를 인텐트에 실어서 보냄 명시적(explicit) 인텐트 “애플리케이션 A의 컴포넌트 B를 구동시켜라“와 같이 명확하게 지정 암시적(implicit) 인텐트 “지도를 보여줄 수 있는 컴포넌트이면 어떤 것이라도 좋다” 9 2. 인텐트 개요 명시적 인텐트 실행하고자 하는 액티비티의 이름을 인텐트에 지정 일반적으로 컴포넌트 이름은 다른 애플리케이션 개발자에게 알려져 있지 않음 주로 애플리케이션 내부에서 사용 동일 애플리케이션 내의 다른 액티비티 실행 암시적 인텐트 타깃 컴포넌트 이름 지정 X 안드로이드가 최적의 컴포넌트 탐색 일반적으로 다른 애플리케이션의 컴포넌트 구동에 사용 10 5 2023-11-06 3. 명시적 인텐트 실습: 두 개의 액티비티로 구성된 앱 ExplicitIntent 프로젝트 생성 res drawable에 pic.jpg 등록 클릭 클릭 11 3. 명시적 인텐트 파일명 변경 activity_main.xml layout1.xml MainActivity.java Activity1.java 변경 방법 프로젝트 뷰에서 각 파일 선택 후 마우스 우클릭 Refactor Rename 새 파일 추가 app java 패키지명 선택 마우스 우클릭 후 New Java Class 선택 Activity2 입력 res layout 선택 마우스 우클릭 후 New Layout Resource File layout2 입력 12 6 2023-11-06 3. 명시적 인텐트 layout1.xml 13 3. 명시적 인텐트 layout2.xml 14 7 2023-11-06 3. 명시적 인텐트 Activity1.java 앞에서 파일명 변경하였으므로 클래 스명도 변경하여야 함 앞에서 파일명 변경하였으므로 식별 자도 변경하여야 함 인텐트 객체에 실행하고자 하는 액티 비티의 클래스 이름 지정 인텐트 객체에 기술된 액티비티 (=Activity2)를 시작 15 3. 명시적 인텐트 Activity2.java 필요한 import문들은 IDE가 자동 입력하므로 생략하였음 현재 액티비티(=Activity2) 종료 하면 이전 액티비티(=Activity1) 으로 되돌아 감 16 8 2023-11-06 3. 명시적 인텐트 AndroidManifest.xml app manifests 폴더에 있음 액티비티 이름 변경하였으므로 여기서도 변경 새로운 액티비티 등록 17 4. 액티비티로부터 결과 받기 실습: int형 값 주고 받기 1.입력 ActivityForResult 프로젝트 생성 2.클릭 1.입력 2.클릭 입력되었음 18 9 2023-11-06 4. 액티비티로부터 결과 받기 activity_main.xml EditText 다음에 19 4. 액티비티로부터 결과 받기 sub.xml res layout에 추가 20 10 2023-11-06 4. 액티비티로부터 결과 받기 MainActivity.java 서브 액티비티 실행 후 결과 받아 오 기 위한 설정 결과 값 전달 받음. 이름(RESULT)과 값의 쌍 21 4. 액티비티로부터 결과 받기 MainActivity.java 계속 서브 액티비티를 실행하고 유저가 입 력한 두 정수를 인텐트에 설정함. 각 각 이름은 “number1”과 “number2” launch() 메소드로 실행 MainActivity 클래스의 괄호 22 11 2023-11-06 4. 액티비티로부터 결과 받기 SubActivity.java 메인 액티비티에서 넘겨 준 두 정수 텍스트뷰에 설정 유저가 입력한 값 인텐트 에 설정 유저가 취소버튼 눌렀을 경우 23 4. 액티비티로부터 결과 받기 AndroidManifest.xml 추가 24 12 2023-11-06 5. 암시적 인텐트 암시적 인텐트 어떤 작업을 하기를 원하지만 그 작업을 담당하는 컴포넌트의 이름을 명 확하게 모르는 경우에 사용 자신이 원하는 작업 기술 (12) 안드로이드가 모든 애플리케이션에서 가장 알맞은 컴포넌트 찾아냄 (23) 매니페스트 파일의 인텐트 필터와 암시적 인텐트 비교 액션과 데이터 지정 예) 액션: 이메일 전송 데이터: 이메일 수신자 암시적 인텐트가 시스템을 통해 전달되어 다른 액티비티를 시작하는 방법 25 5. 암시적 인텐트 인텐트 필터 자신이 수행할 수 있는 각각의 고유한 작업에 대하여 별도의 필터를 선언 예) 이미지 갤러리 앱 한 필터는 이미지 뷰어 다른 필터는 이미지 편집 매니페스트 파일에 기술 예) 프로젝트 생성 후 만들어진 파일 앱의 시작(진입) 지점. 어느 인텐트 데이 터도 기대하지 않음 이 액티비티의 아이콘이 시스템의 앱 시 작 관리자에 배치되어야 한다는 것을 나타 냄 26 13 2023-11-06 5. 암시적 인텐트 실습: 외부 컴포넌트 활용 ImplicitIntent 프로젝트 생성 일부 기능들은 앞장에서 실습 해 보았음 27 5. 암시적 인텐트 activity_main.xml 웹브라우저 버튼 다음에 28 14 2023-11-06 5. 암시적 인텐트 MainActivity.java 29 6. 액티비티 생애주기 액티비티 생애주기 액티비티의 생성부터 소멸까지의 주기를 뜻함 안드로이드 응용프로그램은 화면이 작아 동시에 여러 개의 액티비티(화면) 가 나올 수 없음 앞에 나오는 화면 하나만 활성화된 상태이고 나머지는 모두 비활성화된 상태로 남게 됨 30 15 2023-11-06 6. 액티비티 생애주기 각 상태 별 호출되는 메소드 31 6. 액티비티 생애주기 실습: 각 상태 별 호출되는 메소드에 대해 알아보자 LifeCycle 프로젝트 생성 java 파일만 수정 32 16 2023-11-06 6. 액티비티 생애주기 MainActivity.java onPause() 함수 뒤에 Log.i: 정보를 남기기 위한 로그 기록 33 6. 액티비티 생애주기 Logcat 필터 창에 tag:LifeCycle 입력 앱 실행, 종료(백 버튼), 백그라운드(홈버튼)로 변경하며 로그 관찰 34 17