Android 라이프사이클

소정·2023년 3월 9일
0

Android_with_Java

목록 보기
29/34

액티비티가 객체로 만들어져서 화면에 보여지고 종료되어 메모리에서 사라질때 까지 상황에 따라 자동으로 실행되는 생명주기 콜백(거꾸로 운영체제에세 콜을 나한테 주는 것) 메소드 (주요 6개 메소드)

  1. onCreate : 액티비티가 처음 메모리에 만들어질 때 자동으로 실행되는 메소드 이 메소드가 실행되는 동안에는 어떤 UI도 그려지지않은 상태임
  2. onStart : 액티비티의 뷰들이 보이기 시작할 때 자동 호출 이 메소드 실행중에는 터치해도 동작 안함
    (오래 걸리는 일은 하지 않아야함)
  3. onResume : 액티비티가 완전히 보이고 터치도 가능한 상태

위 1,2,3 메소드가 실행된 후 액티비티는 실행 중인 상태가 된다 => running 상태

  1. onPause : 어떤 이유에서든 액티비티가 화면에서 안보이기 시작 할 때 자동 실행되는 메소드 화면에 UI는 보이지만 터치는 되지않음
    -> 보통 이곳에서 스레드를 pause처리함 (게임을 실행 중지 등)
  2. onStop : 완전히 화면에서 안보일 때 자동 실행되는 메소드

액티비티가 다른 액티비티에 의해 가려진 상태라면 4,5 번 메소드 까지만 발동

  1. onDestroy : 폰에 뒤로가기 버튼이나 finish() 메소드로 엑티비티를 종료 했을 때, 액티비티가 메모리에서 소멸될 때 자동으로 실행되는 메소드
    -> 안드로이드의 12버전부터 (api 31) 디바이스부터 매니패스트에 intent-filter를 가진 액티비티는 [뒤로가기] 버튼을 눌러도 finish()되지 않음 (속도 개선을 위해서)
    만약 뒤로가기 버튼으로 종료하고 싶으면 개발자가 온백프레스트메소드를 재정의 하여 finish 하거나 앱 사용자가 최신 앱 목록에서 스와이프로 제거해야함

생명주기 실행 확인해 보기

두 액티비티 사이를 왔다갔다 하면서 생명주기 확인해보기

main.java

package com.bsj0420.ex80activitylifecyclemethod;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    
    //액티비티 클래스의 라이프사이클 메소드
    // 액티비티가 객체로 만들어져서 화면에 보여지고
    // 종료되어 메모리에서 사라질때 까지 상황에 따라 자동으로 실행되는
    // 생명주기 콜백(거꾸로 운영체제에세 콜을 나한테 주는 것) 메소드 - 주요 6개 메소드
    
    //1. 액티비티가 처츰 메모리에 만들어질 때 자동으로 실행되는 메소드
    // 이 메소드가 실행되는 동안에는 어떤 UI도 그려지지않은 상태임
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btn).setOnClickListener(view -> {
            startActivity(new Intent(this, SecondActivity.class));
        });

        Log.i("TAG","onCreate");

    }

    //2. 액티비티의 뷰들이 보이기 시작할 때 자동 호출
    // 이메소드 실행중에는 터치해도 동작 안함
    // 오래 걸리는 일은 하지 않아야함
    @Override
    protected void onStart() {
        super.onStart();

        Log.i("TAG","onStart");
    }

    //3. 액티비티가 완전히 보이고 터치도 가능한 상태
    @Override
    protected void onResume() {
        super.onResume();

        Log.i("TAG","onResume");
    }

    ///////////////////////////////////////////////////////
    //위 1,2,3 메소드가 실행된 후 액티비티는 실행 중인 상태가 된다 => running 상태
    
    //4. 어떤 이유에서든 액티비티가 화면에서 안보이기 시작 할 때 자동 실행되는 메소드
    //화면에 UI는 보이지만 터치는 되지않음
    //보통 이곳에서 스레드를 pause처리함 (게임을 실행 중지 등)
    @Override
    protected void onPause() {
        super.onPause();

        Log.i("TAG","onPause");
    }

    //5. 완전히 화면에서 안보일 때 자동 실행되는 메소드
    @Override
    protected void onStop() {
        super.onStop();

        Log.i("TAG","onStop");
    }
    //액티비티가 다른 액티비티에 의해 가려진 상태라면 4,5 번 메소드 까지만 발동
    //////////////////////////////////////////
    //6. 폰에 뒤로가기 버튼이나 finish() 메소드로 엑티비티를 종료 했을 때
    //액티비티가 메모리에서 소멸될 때 자동으로 실행되는 메소드
    //안드로이드의 12버전부터 (api 31) 디바이스부터는 
    //처음 실행되는 액티비티는 [뒤로가기] 버튼을 눌러도
    // finish()되지 않음 -> 속도 개선을 위해서
    //만약 뒤로가기 버튼으로 종료하고 싶으면 
    //온백프레스트메소드를 재정의 하여 finish 하거나
    //최신 앱 목록에서 스와이프로 제거
    @Override
    protected void onDestroy() {
        super.onDestroy();

        Log.i("TAG","onDestroy");
    }
}

Second.java

package com.bsj0420.ex80activitylifecyclemethod;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Log.i("TAG", "second onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();

        Log.i("TAG", "second onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();

        Log.i("TAG", "second onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();

        Log.i("TAG", "second onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();

        Log.i("TAG", "second onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        Log.i("TAG", "second onDestroy");
    }
}
profile
보조기억장치

0개의 댓글