내용이 너무 길고 정리할게 많아서 1, 2로 나누어야 할 것 같습니다.
또한, 시간 상 예시를 아직 못하여서 내용만 있습니다.. 죄송합니다.
[플래그]
1. 액티비티는 액티비티 매니저(ActivityManager)라는 객체에 의해 ‘액티비티 스택(Activity Stack)’이라는 것으로 관리됩니다.
....이 스택은 액티비티를 차곡차곡 쌓아두었다가 가장 상위에 있던 액티비티가 없어지면
....이전의 액티비티가 다시 화면에 보이게 됩니다.
2. 이렇게 일반적인 스택 구조를 이용해 액티비티가 관리되기는 하지만 만약 여러분이 동일한
....액티비티를 여러 번 실행한다면 동일한 액티비티가 여러 개 스텍에 들어가게 되고 동시에
....데이터를 여러 번 접근하거나 리소스를 여러 번 사용하는 문제가 발생할 수 있는데, 이
....문제를 해결해주도록 도와주는 것이 플래그입니다.
3. FLAG_ACTIVITY_SINGLE_TOP
.1) 액티비티를 생성할 때 이미 생성된 액티비티가 있으면 그 액티비티를 그대로 사용하라는
... 플래그입니다.
.2) 액티비티가 새로 만들어지지 않고 재사용된다면 액티비티의 onCreate() 메서드가
....호출되지 않습니다. 이 경우에는 새로 띄워지는 액티비티에서 인텐트를 전달 받아
....처리하는 방법이 따로 있어야 합니다. 그것이 바로 onNewIntent() 메서드입니다.
4. FLAG_ACTIVITY_NO_HISTORY
.1) 처음 이후에 실행된 액티비티는 액티비티 스택에 추가되지 않습니다. 즉, 플래그가
.....설정되지 않은 경우에는 이전에 실행되었던 액티비티가 스택에 추가되므로 시스템
.....[Back]키를 누르면 이전의 액티비티가 보입니다. 하지만 이 플래그를 사용하면 항상 맨
.....처음에 실행되었던 액티비티가 바로 보이게 됩니다.
.2) 이 플래그는 알람 이벤트가 발생하여 사용자에게 한 번 알림 화면을 보여주고 싶을 때
.....유용하게 사용할 수 있습니다.
5. FLAG_ACTIVITY_CLEAR_TOP
.1) 이 액티비티 위에 있는 다른 액티비티를 모두 종료시키게 됩니다,
.2) 홈 화면과 같이 다른 액티비티보다 항상 우선하는 액티비티를 만들 때 유용합니다.
[부가 데이터]
1. 한 액티비티에서 다른 액티비티를 띄울 때 데이터를 전달해야 하는 경우도 있습니다.
....예를 들어, 로그인 화면에서 로그인 버튼을 눌러 로그인을 성공하면 메뉴 화면으로
....아이디(또는 이름)를 전달하여 표시해야 할 수도 있습니다.
2. 안드로이드는 다른 앱에서 여러분이 만든 화면을 띄울 수도 있기 때문에 변수를 공유하는
...방식으로 데이터를 전달하는 것이 불가능할 수도 있습니다. 따라서 기본적으로는
...액티비티를 띄울 때 전달되는 인텐트 안에 부가 데이터(Extra data)를 넣어 전달하는
....방법을 권장합니다.
3. 인텐트(Intent)안에는 번들(Bundle)객체가 들어 있는데, putExtra()와 getOOOExtra()
....메서드로 데이터를 넣거나 빼낼 수 있습니다.(여기에서 OOO은 기본 자료형의 이름)
4. 번들 객체 안에 넣은 데이터를 부가 데이터라고 하며 시스템에서는 건드리지 않고 다른 앱
...구성요소로 전달합니다. 번들 안에 문자열이나 정수와 같은 부가 데이터를 넣을 때는
...키(Key)와 값(Value)를 쌍으로 만들어 넣습니다.
5. 안드로이드는 객체를 전달할 때 Serializable 인터페이스와 유사한 Parcelable
....인터페이스를 권장합니다. 직렬화 했을 때 크기가 작아 안드로이드 내부의 데이터 전달에
....자주 사용됩니다. 이 인터페이스를 사용하면 객체를 직접 번들에 추가하여 데이터를
....전송할 때 사용할 수 있습니다. 단, 다음의 두가지 메서드를 모두 구현해야 합니다.
public abstract int describeContents()
☞ 직렬화하려는 객체의 유형을 구분할 때 사용합니다.
public abstract void writeToParcel(Parcel dest, int flags)
☞ 객체가 가지고 있는 데이터를 Parcel 객체로 만들어주는 역할을 합니다.
6. 위의 두가지 메서드를 모두 구현한 다음에는 CREATOR 라는 상수를 만들어야 하는데,
....이 상수는 Parcel 객체로부터 데이터를 읽어 들여 객체를 생성하는 역할을 합니다.
....이 객체는 상수로 정의되고 반드시 static final로 선언되어야 합니다.
※ PARcelable 인터페이스를 구현하여 인테트를 전달하는 예시
[테스크 관리 이해하기]
1. 프로세스는 독립적인 상자와 같아서 프로세스 간의 정보 공유는 어럽습니다. 그래서
....테스크(Task)라는 것이 만들어져 있습니다.
2. 태스크는 앱이 어ᄄᅠᇂ게 동작할지 결정하는 데 사용됩니다. 즉, 태스크를 이용하면
....프로세스처럼 독립적인 실행 단위와 상관없이 어떤 화면들이 같이 동작해야 하는지 흐름을
....관리할 수 있습니다.
[프로세스와 태스크]
1. 하나의 프로세스에서 다른 프로세스의 화면을 띄우려면 시스템의 도움이 필요합니다.
....시스템에서 이런 액티비티의 각종 정보를 저장해두기 위해 태스크라는 것을 만들게
....됩니다. 만약 여러분의 앱에서 전화 앱의 화면을 띄우지 않고 전화 앱을 따로 실행시키면
....전화 앱의 태스크는 여러분 앱의 태스크와 별도로 만들어지게 됩니다.
2. 시스템은 알아서 태스크를 관리하지만 여러분이 직접 제어해야 하는 경우도 생깁니다.
....이를 위해 매니페스트 파일(AndroidManifest.xml)에 액티비티를 등록할 때 태스크도 함께
....설정할 수 있습니다.
※ 태스크 설정 예시
☞ 태스크는 앞에서 설명한 것처럼 새로 뜨는 화면을 차례대로 스택에 넣어서 관리합니다.
[액티비티의 수명주기와 SharedPreferences 이해하기]
1. 액티비티의 상태 정보가 변화하는 것을 액티비티의 ‘수명주기(Life Cycle)’ 또는
....생명주기라 하며 액티비티가 처음 만들어진 후 없어질 때까지 상태가 변화하면서 각각에
....해당하는 메서드가 자동으로 호출됩니다.
상태메서드 |
설명 |
onCreate() |
액티비티가 처음에 만들어졌을 때 호출됨 화면에 보이는 뷰들의 일반적인 상태를 설정하는 부분 이전 상태가 저장되어 있는 경우에는 번들 객체를 참조하여 이전상태 복원 가능 이 메서드 다음에는 항상 onStart()메서드가 호출됨 |
onStart() |
액티비티가 화면에 보이기 바로 전에 호출됨 액티비티가 화면 상에 보이면 이 메서드 다음에 onResume() 메서드가 호출됨 액티비티가 화면에서 가려지게 되면 이 메서드 다음에 onStop() 메서드가 호출됨 |
onResume() |
액티비티가 사용자와 상호작용하기 바로 전에 호출됨 |
onRestart() |
액티비티가 중지된 이후에 호출되는 메서드로 다시 시작되기 바로 전에 호출됨 이 메서드 다음에는 항상 onStart() 메서드가 호출됨 |
onPause() |
또 다른 액티비티를 시작하려고 할 때 호출됨 저장되지 않은 데이터를 저장소에 저장하거나 애니메이션 중인 작업을 중지하는 등의 기능을 수행하는 메서드임 이 메서드가 리턴하기 전에는 다음 액티비티가 시작될 수 없으므로 이 작업은 매우 ᄈᆞᆯ리 수행된 후 리턴 되어야 함 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음 |
onStop() |
액티비티가 사용자에게 더 이상 보이지 않을 때 호출됨 액티비티가 소멸되거나 또 다른 액티비티가 화면을 가릴 때 호출됨 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음 |
onDestroy() |
액티비티가 소멸되어 없어지기 전에 호출됨 이 메서드는 액티비티가 받는 마지막이 호출이 됨 액티비티가 앱에 의해 종료되거나 시스템이 강제로 종료시키는 경우에 호출될 수 있음 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음 |
2. onPause()와 onResume() 메서드를 구현하여 앱의 상태를 저장하거나 복원해야 합니다.
3. 이러한 방법 이외에도 액티비티를 중지시키기 전에 호출되는 onSaveInstanceState()
...메서드를 이용해 데이터를 임시로 저장할 수도 있습니다. 이 메서드의 파라미터로 전달되는
...번들 객체를 이용해 데이터를 저장하면 onCreate() 메서드나 onRestoreInstanceState()
...메서드로 저장했던 데이터가 전달됩니다. 이 방식을 사용하면 앱이 강제 종료되거나 비정상
...종료된 이후에 앱이 재실행되었을 때도 그 상태 그대로 보일 수 있도록 만들어줍니다.
※ 액티비티 수명주기 확인 예시
☞ 시스템에서 자동으로 호출하는 메서드를 ‘콜백 메서드(Callback Method)’라고 합니다.
4. 앱 안에서 간단한 데이터를 저장하거나 복원할 때는 SharedPreferences를 사용할 수
...있습니다. 이것은 앱 내부에 파일을 하나 만드는데 이 파일 안에서 데이터를 저장하거나
...읽어올 수 있게 합니다.개발자는 실제로 파일을 만들 필요 없이 SharedPreferences의
...저장, 복원 메서드를 호출하면 됩니다.
※ SharedPreferences 사용 예시
'컴퓨터학원(복습)(수료)' 카테고리의 다른 글
자바(JAVA)기반 안드로이드 웹&앱 개발 41일차 (상단 탭, 하단 탭, 뷰페이저, 바로가기 메뉴, 서비스) (0) | 2021.04.26 |
---|---|
자바(JAVA)기반 안드로이드 웹&앱 개발 40일차 (2) (프래그먼트, 액션바) (0) | 2021.04.25 |
자바(JAVA)기반 안드로이드 웹&앱 개발 39일차 (토스트, 스낵바, 프로그레스바, 인플레이션, 화면 간 전환, 인텐트) (0) | 2021.04.22 |
자바(JAVA)기반 안드로이드 웹&앱 개발 38일차 (이벤트처리, 단말방향 전환) (0) | 2021.04.21 |
자바(JAVA)기반 안드로이드 웹&앱 개발 37일차 (테이블 레이아웃, 프레임 레이아웃, 스크롤뷰, 텍스트뷰, 버튼, 에디트 텍스트, 이미지 뷰, 드로어블) (0) | 2021.04.19 |