Uploaded by 위은선

new

advertisement
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. 암시적 인텐트
 암시적 인텐트
 어떤 작업을 하기를 원하지만 그 작업을 담당하는 컴포넌트의 이름을 명
확하게 모르는 경우에 사용
 자신이 원하는 작업 기술 (12)
 안드로이드가 모든 애플리케이션에서 가장 알맞은 컴포넌트 찾아냄 (23)
 매니페스트 파일의 인텐트 필터와 암시적 인텐트 비교
 액션과 데이터 지정
 예)
 액션: 이메일 전송
 데이터: 이메일 수신자
암시적 인텐트가 시스템을 통해 전달되어
다른 액티비티를 시작하는 방법
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
Download