꾸준히 안타치기

Activity 생명주기 simple 본문

Android _ 서버연동_채팅/Android - study

Activity 생명주기 simple

글자줍기 2021. 1. 10. 01:29
반응형

액티비티 생명주기

액티비티는 다음 그림과 같은 생명주기(LifeCycle)를 가지고 있다. 이 생명주기에 따라 적절한 메소드가 호출되므로 이를 숙지해서 액티비티를 작성해야 한다. 물론 다음 내용은 안드로이드 개발을 어느 정도 해봐야 감이 오는 부분이니 지금은 잠시 눈요기만 하고 나중에 다시 살펴보기 바란다.

액티비티 생명주기는 onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestory()순으로 실행되며, 경우에 따라서 onRestart() 메소드가 호출되기도 한다. 이에 대한 자세한 설명은 다음의 액티비티 생명주기 표를 참고하기 바란다.

 

액티비티 생명주기

onCreate  ()             액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨.
초기화 처리 , 뷰 생성 
onStart()
onRestart() 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출됨. onStart()
onStart() 액티비티가 사용자에게 보여지기 바로 직전에 호출됨.
통신이나 센서 처리 시작
onResume() 또는 onStop()
onResume() 액티비티가 사용자와 상호작용하기 바로 전에 호출됨.
필요한 애니메이션 실행, 화면 갱신 처리
onPause()
onPause() 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드. 홈키나 뒤로 나가기 눌렀을때 저장됨.

일부만 가렸을때 onPause() / 액티비티 사라지기 직전 
애니메이션 등 화면 갱신 처리 정지 또는 일시 정지할 때 /
필요 없는 리소스 해체하거나 필요한 데이터 영속화
onResume() 또는 onStop()
onStop() 액티비티가 더이상 사용자에게 보여지지 않을 때 호출됨. 메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수도 있음.

전체를 다가렸을 경우 onStop() / 액티비티에서 사라짐
통신이나 센서 처리 정지
onRestart() 또는 onStart()
onDestroy()
onDestroy() 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨.

멈췄다가 종료되는것 
finish() 
필요 없는 리소스 해제, 액티비티 참조 정리
없음

1.onCreate()

액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨. 초기화 처리 , 뷰 생성 

2. onStart

사용자와 상호작용 하기 전과 직전, 액티비티가 사용자에게 보여지기 바로 직전에 호출됨.

회원가입 등이 필요한 기능에서 리스너객체를 onCreate에 선언,

onStrat에서 리스터를 등록 하고, 로그인한 사용자인지 구분해 로그인화면으로 갈지 메인으로 갈지 구분함.

브로드캐스트 리시버 등록 시에 도 사용 ,통신이나 센서 처리 시작

@Override
public void onStart(){
    super.onStart();
  //각종 리스너 등록
  /*
    ex. registerReceiver(receiver, filter);
  */
}

 

2. onStart -> 3. onResume ->onPause ->3. onResume

직접적으로 사용자의 터치 이벤트나 Toast등이 실행 될때 호출됨

@Override
public void onResume(){
    super.onResume();
  //사용자에게 보여질 데이터 등 가져오기
        ex.
        /*
        Gson gson = new Gson();
        String json = sharedPreferences.getString("data", "");
        data = gson.fromJson(json, Data.class);
        */
        //위 코드는 밑에 onPause에서 자세하게 설명한다.
}

 

4.onPause ->onResume

일부만 가렸을때 onPause()  다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드.

@Override
 public void onPause(){
     super.onPause();
 //사용자에게 보여지지 않을 때 임시로 뭔가 저장하거나 자원 해제 등 작성
     ex.
     /*
     SharedPreferences.Editor prefsEditor = sharedPreferences.edit();
     Gson gson = new Gson();
     String json = gson.toJson(data);
     prefsEditor.putString("data", json);
     prefsEditor.apply();
     */
}

 

5.onStop -> onStart

전체를 다가렸을 경우 onStop()   보통 객체의 null 체크 후에 값이 있을 경우 자원을 해제할 때 사용한다.

@Override
public void onStop(){
    super.onStop();
//사용자에게 액티비티가 보여지지 않을 때 호출된다.
    ex.
    /*
       if (tts!= null) {
            tts.stop();
        }

}

 

6.onRestart

onRestart는 생명주기상 onStop 됐다가 다시 보여질 때 호출된다.

 

 

6.onDestroy

액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨.

Override
public void onDestroy(){
    super.onDestroy();
    //액티비티가 소멸될 때 호출할 메소드등 선언된
    ex.
    /*
      if (tts != null) {
        tts.stop();
        tts.shutdown();
    }
    */
    /*
    위 onStop()에선 stop만 했다면, onDestroy에서는 shutdown()메소드 까지 호출하여 완전히 자원을 해제해준다.
    */
}

 

 

 

생명주기 메서드 호출 순서

1. 시작할 때 : onCreate -> onStart -> onResume

2. 화면 회전할 때 : onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume

3. 다른 액티비티가 위에 뜰 때/전원 키로 화면 OFF할 때/홈 키 : onPause -> onStop

4. 백 키로 액티비티 종료 : onPause -> onStop -> onDestory

5. 백 키로 기존 액티비티에 돌아올 때/홈 키로 나갔다가 돌아올 때 : onRestart -> onStart -> onResume

6. 다이얼로그 액티비티나 투명 액티비티가 위에 뜰 때 : onPause

 

※ onStop(), onDestory()는 호출되지 않을 수도 있음

TIP & TECH 사용자가 홈 키를 눌렀는지를 파악하는 방법
Activity 클래스에는 onUserLeaveHint() 메소드가 제공되고 있다. 이 메소드가 바로 사용자가 홈 키를 눌렀을 때, 호출되는 메소드이다. 그러므로 이 메소드를 재정의해서 원하는 코드를 작성하면 된다. 참고로 이 메소드가 호출된 뒤에는 Activity의 onPause() 메소드가 호출된다.

 

 

 

참고 블로그

kairo96.gitbooks.io/android/content/ch2.4.1.html

 

액티비티 생명주기 · [최신] 예제로 배우는 안드로이드 ANDROID

 

kairo96.gitbooks.io

https://programmingfbf7290.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0Activity-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-%EC%B4%9D%EC%A0%95%EB%A6%AC?category=666988 

 

안드로이드 액티비티(Activity) 생명주기 총정리

: 해당 포스트는 액티비티 생명주기에 대한 기본적인 내용을 안다는 가정 하에 내용을 진행한다. : 다른 액티비티가 일부만 가리면 onPause()가 호출되고 전체를 가리면 onStop()이 호출된다. 디바이

programmingfbf7290.tistory.com

 

 

반응형

'Android _ 서버연동_채팅 > Android - study' 카테고리의 다른 글

저장하기 / 저장된 sharedpreference/ 다시 불러오기  (0) 2021.02.07
Json 사용법  (0) 2021.02.02
sharedpreference gson  (0) 2021.02.02
Acitivity 라이프사이클  (0) 2021.01.10
안드로이드란?  (0) 2021.01.07
Comments