하단의 링크를 보면 활동 수명 주기라고 번역이 되어 나오는데, 

화면(xml)과 로직(java등)의 결합체인 Activity의 시작과 끝의 동작 과정을 Activity Life Cycle이라고 한다. 

안드로이드 화면에서 앱을 실행시킨 후 back 버튼 누르면 앱이 사라진다. 이런 식의 과정에서 각 함수들이 작동하는 것이다. 안드로이드에서 앱의 실행 버튼을 누르면 가장 먼저 manifests/AndroidManifest.xml에서 설정한 android.intent.action.MAIN이 실행된다. 카카오톡의 경우 로고액션이 들어간 액티비티부터 실행된다고 할 수 있다. 

 

<action android:name="android.intent.action.MAIN" />


그리고 실행된 앱은 홈버튼을 누르면 잠시 중지(일시중지)되어 있어야 한다. 

그리고 다른 앱을 실행시키거나 다른 페이지로 이동했을 때도 잠시 일시 중지 되어야 한다.  
그리고 다시 실행시킬 수 있어야 한다.

실행한 액티비티(화면xml+로직java)가 사라지는 경우는
- 백버튼 눌러서 종료되는 경우, 
- 다른 액티비티가, 이 액티비티 위에 실행되는 경우

두 가지이다. 

 

이런 앱의 동작들은 안드로이드 프레임워크에서 정해준 함수들을 사용하여 손쉽게 구현할 수 있다. 

 

우리가 실행해야 될 동작들은 이미 안드로이드 개발자들이 함수로 만들어 두었다. 

이 함수들이 무엇이며 언제 실행되느냐는 외워야 한다. ^-^  

프레임워크를 익힌다는 것은

프레임워크의 함수들이 1. 어떤 동작을 하고 2. 언제 동작하며, 
3. 어디에 넣어야 하는지를 배우는 것이다. 

처음 앱이 실행되면 onCreate() 화면의 설정과 관련된 작업. 실행되면 눈앞에 화면이 보인다. 
안드로이드 프레임워크가 순서대로 부른다. 
onCreate() → onStart()  onResume....

 

 

 

Activity Life Cycle

활동 수명 주기에 관한 이해  |  Android 개발자  |  Android Developers

 

활동 수명 주기에 관한 이해  |  Android 개발자  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

 

 

 

 

화면에 나타나게 하는 함수들과
화면에서 사라지게 하는 함수들

MainActivity.java 

package com.bpdev.lifecycle;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {
    // 안드로이드 프레임워크 개발자들이 만든 AppCom 을 상속받는다.

    // 눈 앞에 나타나게 하는 함수들
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); // 화면과 로직 연결하는 코드
        // 액티비티 버튼을 누르는 순간 onCreate()가 호출되었다. 아직 보이지는 않는 상태.
        // 시작하면 딱 한 번 실행된다. 초기화 작업 설정 작업을 여기서 해 준다.
        Log.i("Life MAIN", "onCreate 실행됨");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("Life MAIN", "onStart 실행됨");
        // onStart는 개발자들이 잘 쓰지는 않는 편이다.
    }

    @Override
    protected void onResume() {
        super.onResume();
        // onCreate 다음으로 중요한 함수. 화면이 나오기 전에 무조건 실행되는 함수.
        Log.i("Life MAIN", "onResume 실행됨");

    }



    // 눈앞에서 사라지게 하는 함수들
    @Override
    protected void onPause() {
        super.onPause();
        Log.i("Life MAIN", "onPause 실행됨");

    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("Life MAIN", "onStop 실행됨");
        // 여기까지는 안 보여도 메모리에 남아 있다. 여기서 onStart실행된다.

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("Life MAIN", "onDestroy 실행됨");
        // back 버튼을 눌러서 완전히 종료되면 onDestroy 실행됨.

    }
}

 

 

 

 

두 개의 Activity 연결하기 

MainActivity.java 

package com.bpdev.lifecycle;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    // 안드로이드 프레임워크 개발자들이 만든 AppCom 을 상속받는다.

    Button button;

    // 눈 앞에 나타나게 하는 함수들
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); // 화면과 로직 연결하는 코드
        // 액티비티 버튼을 누르는 순간 onCreate()가 호출되었다. 아직 보이지는 않는 상태.
        // 시작하면 딱 한 번 실행된다. 초기화 작업 설정 작업을 여기서 해 준다.
        Log.i("Life MAIN", "onCreate 실행됨");

        button = findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // SecondActivity를 실행시키고 싶다.

                // 이 액티비티는 객체 생성이 되어서 메모리에 있고, 그래서 화면이 나오는 것이다.

                // 새로운 액티비티를 실행시키고 싶다면
                // Intent라는 객체가 필요하다. 메모리로 불러온다.
                // 이 액티비티가 다른 액티비티를 실행시킨다!
                // 라는 의미로, 파라미터를 설정해 준다.
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                // SecondActivity, 이 클래스를 객체로 만들어라 메모리로 불러와라라는 말.
                // 메모리에만 있다. 실제 실행하려면,
                startActivity(intent);


            }
        }); // 한 줄이라서 ; 붙입니다~


    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("Life MAIN", "onStart 실행됨");
        // onStart는 개발자들이 잘 쓰지는 않는 편이다.
    }

    @Override
    protected void onResume() {
        super.onResume();
        // onCreate 다음으로 중요한 함수. 화면이 나오기 전에 무조건 실행되는 함수.
        Log.i("Life MAIN", "onResume 실행됨");

    }



    // 눈앞에서 사라지게 하는 함수들
    @Override
    protected void onPause() {
        super.onPause();
        Log.i("Life MAIN", "onPause 실행됨");

    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("Life MAIN", "onStop 실행됨");
        // 여기까지는 안 보여도 메모리에 남아 있다. 여기서 onStart실행된다.

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("Life MAIN", "onDestroy 실행됨");
        // back 버튼을 눌러서 완전히 종료되면 onDestroy 실행됨.

    }
}

 

 

SecondActivity.java 

package com.bpdev.lifecycle;

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("LIFE SECOND", "두번째 액티비티의 onCreate 실행");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("LIFE SECOND", "두번째 액티비티의 onStart 실행");

    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("LIFE SECOND", "두번째 액티비티의 onResume 실행");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("LIFE SECOND", "두번째 액티비티의 onPause 실행");

    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("LIFE SECOND", "두번째 액티비티의 onStop 실행");

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("LIFE SECOND", "두번째 액티비티의 onDestroy 실행");
    }
}

 

첫번째 액티비티 실행 후, 

첫번째 액티비티에서 두번째 액티비티로 가는 버튼을 누르면 아래 이미지의 1~5 줄과 같은 동작이 진행된다.

두번째 액티비티 화면에서 뒤로 가기 버튼을 누르면 6~10번 동작이 진행되며 첫번째 액티비티로 돌아온다. 

다시 돌아온 첫번째 액티비티에서 홈 버튼을 누르면 onPause와 onStop이 실행되며 앱이 사라진다.

앱을 종료시키면 onDestroy 함수가 실행된다.  

 

 

 

화면들

res / layout / activity_main.xml

 

res / layout / activity_second.xml

+ Recent posts