노블의 개발이야기

[안드로이드 개발 레벨업 교과서] 2.1 액티비티를 이해하자 본문

Books

[안드로이드 개발 레벨업 교과서] 2.1 액티비티를 이해하자

더플러스 2017. 8. 24. 01:11

2.1.1. 액티비티란?

AppCompatActivity는 액티비티를 상속하며, 액티비티를 상속함으로써 머터리얼 디자인(Material Design)의 가이드라인에 따른 AppCompat 라이브러리를 제대로 활용할 수 있습니다.

AppCompatActivity를 상속할 수 없을 때는 다음과 같이 android.support.v7.app.AppCompatDelegate를 이용합니다.

public class MainActivity extends Activity {
	AppCompatDelegate mDelegate;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mDelegate = new AppCompatDelegate(this);
		mDelegate.setContentView(R.layout.activity_main);
	}
}

2.1.2 액티비티의 수명주기를 이해하자

액티비티의 수명주기 종류

메서드명 시점 처리 예
onCreate 생성 시 초기화 처리와 뷰 생성(setContentView 호출) 등
onStart 비표시 시 통신이나 센서 처리를 시작
onRestart 표시 시 (재시작만) (보통 아무것도 하지 않는다)
onResume 최전면 표시 필요한 애니메이션 실행 등의 화면****갱신 처리
onPause 일부 표시(일시정지) 상태 애니메이션 등 화면 갱신 처리를 정지 또는 일시정지할 때
필요 없는 리소스를 해제하거나 필요한 데이터를 영속화
onStop 비표시(정지) 상태 통신이나 센서 처리를 정지
onDestroy 폐기 시 필요없는 리소스를 해제, 액티비티 참조는 모두 정리한다.
  • Android N 부터 멀티윈도우가 도입되어 멀티윈도우를 지원하는 경우 애니메이션 실행 등 화면 갱신 처리의 정지는 onStop에서 합니다.

디바이스 설정의 갱신 참지

액티비티는 디바이스 설정에 변경이 발생하면 기본적으로 시스템에서 현재 액티비티를 폐기하고 새로 생성합니다. 예를 들어, 화면을 회전하거나 언어 설정을 변경하거나, 단말기 SIM 교체에 따른 전화번호 변경 등 디바이스 설정이 변경된 경우

액티비티를 재생성할 때 현재 상태를 일시적으로 저장하고 싶은 경우, onSaveInstanceState/onRestoreInstanceState라는 콜백 메서드를 사용합니다.

2.1.3 액티비티의 백스택을 이해하자

새로운 액티비티가 시작되면 실행 중이던 액티비티는 백스택에 들어갑니다. 또한 시작한 액티비티는 태스크라는 그룹에 속합니다.

  • 같은 앱에서 시작된 액티비티는 같은 백스택에 쌓인다.
  • taskAffinity의 속성에 따라 소속되는 태스크가 달라진다.
  • launchMode에 따라 액티비티 생성의 여부, 새로운 태스크에 속하는 등 액티비티의 시작이 달라진다.

taskAffinity

  • taskAffinity는 태스크 친화성이라는 의미지만, 대체로 "태스크 이름"으로 바꿔 읽는 것이 이해하기 쉽습니다.
  • taskAffinity가 지정되지 않은 경우는 자기 앱의 패키지 이름이 태스크 이름이 됩니다.
  • taskAffinity를 설정하지 않으면 그 앱의 taskAffinity(태스크 이름)은 모두 같아집니다.

launchMode

launchMode 내용
standard 매번 액티비티의 인스턴스를 새로 생성한다. (기본값)
singleTop 같은 액티비티가 최상위에서 실행 중이면 액티비티를 생성하지 않고,
그 대신 최상위 인스턴스의 onNewIntent()를 호출한다.
singleTask 1개의 태스크에 인스턴스가 존재한다.
이미 같은 액티비티가 실행 중이면 액티비티를 생성하지 않는다.
singleInstance 1개의 태스크에 1개의 인스턴스만 존재한다.
다른 액티비티를 태스크에 포함하지 않는다.
이미 같은 액티비티가 실행 중이면 액티비티를 생성하지 않는다.
(기본적으로 사용하지 않는다.)

singleTask는 브라우저 앱이나 게임 앱 등 여러 액티비티를 만들고 싶지 않을 때 사용합니다

백스택 확인 (adb)

adb shell dumpsys activity activities

singleTask, singleInstance로 설정한 경우, startActivityForResult()를 호출해 다른 앱과 연계할 수 없습니다. 이때는 곧바로 Activity.RESULT_CANCELED가 반환되어 취소로 다루게 됩니다.



Notice: 이 글은 [안드로이드 개발 레벨업 교과서]를 스터디하면서 정리한 내용입니다.

Comments