[안드로이드 스튜디오] - 액티비티 생명주기
# Activity 생성과 소멸
@ 액티비티 생성과 소멸
Activity 는 화면에 보여지기 위해 생성/소멸되는 가장 기본적인 단위이다.
프로그램 짤때에 가장 기본적인 부분이 될 듯하다.
제일 중요하면서 가장 많이 쓰이는 부분이니 초기에는 이부분을 책갈피 해 놓고 외워질때까지 계속 반복해서 참고해야만 한다.
Activity Lifecycle
( 액티비티 생명주기 )
자료 : https://developer.android.com/reference/android/app/Activity.html
[구글번역]
당신이 당신의 활동에서 모니터링에 관심이있을 수 있습니다 세 가지 핵심 루프가 있습니다 :
- 전체 수명 활동의은 처음 호출간에 일어나는
onCreate(Bundle)
단일 최종 통화로 연결onDestroy()
. 활동이에서 onCreate (에서 "글로벌"상태)의 모든 설정을 수행하고들의 OnDestroy에 남아있는 모든 리소스를 해제합니다 (). 이 네트워크에서 데이터를 다운로드하는 백그라운드에서 실행 스레드를 갖는 경우, 예를 들어,가에서 onCreate ()에서 스레드를 생성 할 수있다 다음들의 OnDestroy의 스레드를 중지 (). - 표시 수명 활동의 호출이 발생하는 사이
onStart()
에 대응하는 통화까지onStop()
. 이 전경에서 사용자와 상호 작용하지 않을 수 있지만이 시간 동안 사용자는 화면의 활동을 볼 수 있습니다. 이러한 두 가지 방법 사이에 당신이 사용자에게 활성을 나타내는 데 필요한 자원을 관리 할 수 있습니다. 예를 들어, 당신은을 등록 할 수 있습니다BroadcastReceiver
사용자가 더 이상 당신이 표시되는 것을 볼 때 () 당신의 UI에 영향을 미칠 변화를 모니터링하지 않으며, 중지시에 등록을 취소 ONSTART ()에서. 활동이 표시되어 사용자에게 숨겨진대로 ONSTART () 및 중지시 () 메소드는, 여러 번 호출 될 수있다. - 전경 수명 활동의이 사이에 통화 발생
onResume()
에 대응하는 호출 할 때까지onPause()
. 이 시간 동안 활동이 다른 활동의 앞에와 사용자와의 상호 작용. 장치가 새로운 의도가 전달 될 때 활동 결과가 전달 될 때, 절전 모드로 전환 할 때 - 예를 들어 - 활동 자주 재개 일시 정지 상태 사이 갈 수 있도록 이러한 방법의 코드는 상당히 가벼워 야한다.
활동의 전체주기는 다음 활동 방법에 의해 정의된다. 이 모든 활동 상태가 변화 할 때 적절한 작업을 할 재정의 할 수 후크입니다. 모든 활동은 구현할 onCreate(Bundle)
초기 설정을 할; 많은도 구현할 onPause()
데이터에 대한 변경 사항을 적용하고 다른 사용자와의 상호 작용 중지를 준비 할 수 있습니다. 이러한 방법을 구현할 때 당신은 항상 당신의 슈퍼 클래스를 호출합니다.
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
일반적으로 활동의 라이프 사이클을 통해 움직임은 다음과 같습니다
방법 | 기술 | Killable? | 다음 것 | ||
---|---|---|---|---|---|
onCreate() | 활동이 처음 생성 될 때 호출된다. 사용자가 설정 일반 정적을 모두 수행해야하는 곳이다 :이 방법은 하나가 있다면 번들은 활동의 이전에 냉동 상태를 포함을 제공 등, 목록에 데이터를 바인딩, 뷰를 만들 수 있습니다. 항상 다음에 | 아니 | onStart() | ||
onRestart() | 당신의 활동이 중단 된 후 호출, 그 이전에 다시 시작된다. 항상 다음 | 아니 | onStart() | ||
onStart() | 활동이 사용자에게 표시 될 때 호출됩니다. 다음 | 아니 | onResume() 또는onStop() | ||
onResume() | 활동이 사용자와 상호 작용을 시작할 때 호출됩니다. 이 시점에서 당신의 활동은 사용자 입력이가는으로 활동 스택의 상단에 있습니다. 항상 다음에 | 아니 | onPause() | ||
onPause() | 시스템이 이전에 활동을 재개 시작하려고 할 때 호출됩니다. 이것은 일반적으로 다음 활동이 메소드가 반환 될 때까지 재개되지 않기 때문에이 방법의 구현은 매우 빨리해야한다, 영구 데이터에 저장되지 않은 변경 사항을 커밋 CPU 등을 소모 할 수있다 애니메이션과 다른 일을 중지하는 데 사용됩니다. 다음 중 | 사전HONEYCOMB | onResume() 또는onStop() | ||
onStop() | 다른 활동을 재개되었고 이것을 덮고 있기 때문에 활성이 사용자에게 보이지 않을 때 호출 없다. 새로운 활동이 시작되고 있기 때문에이 일어날 수도 있고, 기존이 하나의 앞에 가져되고, 또는이 하나가 파괴되고있다. 중 다음에 | 예 | onRestart() 또는onDestroy() | ||
onDestroy() | 활동 전에 당신이받는 마지막 호출은 파괴된다. 이러한 상황이 발생할 수 있습니다 활동이 (누군가라고 마무리되기 때문에 finish() 그것을, 또는 시스템이 일시적으로 공간을 절약하기 위해 활동의 인스턴스를 파괴되기 때문이다. 당신은 이러한 두 가지 시나리오를 구별 할 수 isFinishing() 방법. | 예 | 아무것도 |
상기 표에서 "Killable '항목을 주 - killable 것으로 표시되어 이러한 방법을 위해, 그 방법은 활성을 호스팅하는 프로세스 시스템에 의해 종료 될 수 리턴 후 언제든지 실행되는 그 코드의 다른 광고없이. 이 때문에, 당신은 사용해야 onPause()
스토리지 (예 : 사용자 편집 등) 모든 영구 데이터를 작성하는 방법을. 또한, 방법은 onSaveInstanceState(Bundle)
나중에 수신 할, 당신은 주어진 번들로 활동에 동적 인스턴스 상태를 멀리 저장할 수 있습니다, 이러한 배경 상태에서 활동을 배치하기 전에 호출 onCreate(Bundle)
활동이 다시 작성해야합니다. 참고 항목 프로세스 라이프 사이클을 프로세스의 라이프 사이클이 호스팅하는 활동에 연결하는 방법에 대한 자세한 내용은 섹션을 참조하십시오. 이 글은 영구 데이터를 저장하는 것이 중요합니다 onPause()
대신 onSaveInstanceState(Bundle)
후자의 라이프 사이클 콜백의 일부가 아니므로, 그래서 그 문서에 설명 된대로 모든 상황에서 호출되지 않습니다.
이러한 의미로 시작하는 플랫폼을 대상으로 응용 프로그램간에 약간 변경됩니다주의 HONEYCOMB
대 이전의 플랫폼을 대상으로하는. 그 때까지 벌집을 시작으로, 응용 프로그램은 killable 상태가 아닌 onStop()
반환했습니다. 때 영향 onSaveInstanceState(Bundle)
이라고 할 수있다 (안전하게 후 호출 할 수 있습니다 onPause()
및 수 있습니다 때까지 응용 프로그램을 안전하게 기다릴 onStop()
지속 상태를 저장합니다.
killable 것으로 표시되지 않은하는 메소드, 활동의 과정은 메소드가 호출 될 때부터 시작하고 반환 후 계속 시스템에 의해 살해되지 않습니다. 따라서 활동 후 사이에, 예를 들면, 상태에 killable onPause()
의 시작 onResume()
.
@ JavaLayoutActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | package com.example.admin.javalayout; import android.support.constraint.ConstraintLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Button; public class JavaLayoutActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("TAG","onCreate / 앱 생성 (초기화)"); } @Override protected void onRestart(){ super.onRestart(); Log.e("TAG","onRestart / 다시 실행"); } @Override protected void onStart(){ super.onStart(); Log.e("TAG","onStart / 시작"); } @Override protected void onResume(){ super.onResume(); Log.e("TAG","onResume / 다시 시작"); } @Override protected void onPause(){ super.onPause(); Log.e("TAG","onPause / 일시 정지"); } @Override protected void onStop(){ super.onStop(); Log.e("TAG","onStop / 정지"); } @Override protected void onDestroy(){ super.onDestroy(); Log.e("TAG","onDestroy / 종료"); } } | cs |
@ 상태메소드
onCreate()
- 처음 액티비티를 생성( 초기화 ) 할 때 호출된다.
onRestart()
- 액티비티가 다시 활성화 될 때 호출 된다.
- onCreate가 호출되지 않아 놓쳐지는 부분이 있으면 여기서 체크해주면 될 듯 하다.
onStart()
- 액티비티가 활성화 될 때 호출 된다.
onResume()
- 액티비티가 활성화 되기 바로 전에 호출 된다.
onPause()
- 액티비티를 일시정지 시킨다.
- 활성화 되었던 액티비티의 자료들을 빠르게 저장해 놓아야 한다.
onStop()
- 액티비티가 완전히 멈추어지면서 호출 된다.
onDestroy()
- 액티비티가 소멸될 때 호출된다.
@ 실제로 실행해서 Log 내역을 확인해보았다.
- 앱 첫 실행
E/TAG: onCreate / 앱 생성 (초기화)
E/TAG: onStart / 시작
E/TAG: onResume / 다시 시작
- 뒤로가기(앱 닫음)
E/TAG: onPause / 일시 정지
E/TAG: onStop / 정지
E/TAG: onDestroy / 종료
- 다시 실행
E/TAG: onRestart / 다시 실행
E/TAG: onStart / 시작
E/TAG: onResume / 다시 시작
- 홈버튼 or 최근앱리스트 버튼
E/TAG: onPause / 일시 정지
E/TAG: onStop / 정지
- 앱 완전히 닫기
E/TAG: onDestroy / 종료
- 화면 회전시 ( 가로>세로 or 세로>가로 )
E/TAG: onStop / 정지
E/TAG: onDestroy / 종료
E/TAG: onCreate / 앱 생성 (초기화)
E/TAG: onStart / 시작
E/TAG: onResume / 다시 시작
가로>가로 or 세로>세로 는 호출되는 게 없었다.
그리고 상당히 의외였다. 완전히 종료되었다가 다시 생성되다니...
이부분때문에 개발자들은 머리를 싸맬듯한 스멜이 느껴진다.
실질적으로는 액티비티의 소멸시에 onDestroy() 가 호출되지 않을 수 있으니 주의 하자~!!!
- 최근 앱리스트 버튼 클릭 후 x(창닫기) 버튼클릭해서 닫으니 onDestroy() 이벤트가 발생하지 않았고,
옆으로 밀어서 종료하니 onDestroy() 이벤트가 발생했다.
자료참고 : http://blog.naver.com/lsh00124/220504328418
http://insurang.tistory.com
'Programing (프로그래밍) > Android Studio (안드로이드 스튜디오)' 카테고리의 다른 글
⟪Do it! 안드로이드 앱 프로그래밍⟫ 개정 5판 (0) | 2018.02.12 |
---|---|
【 Android Studio 】 - 토스트 메세지 띄우기 ( Toast Message ) (0) | 2017.12.01 |
Android Studio (안드로이드 스튜디오) - 처음 앱 셋팅하기 / Autoconnect (0) | 2017.11.23 |
Android Studio (안드로이드 스튜디오) 첫번째 어플리케이션(APP) 만들기 (2) | 2017.11.22 |
[ 안드로이드 스튜디오 ] - 일반 제스처 감지와 처리하기 (0) | 2017.11.18 |
[ 안드로이드 스튜디오 ] 터치와 다중 터치 이벤트 처리하기 (0) | 2017.11.16 |
[안드로이드 스튜디오] - 핸드폰에서 USB 디버깅 하기 (0) | 2017.11.02 |
Android Studio (안드로이드 스튜디오) 개발환경 구성하기 (0) | 2017.09.04 |