왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • yolov8
  • alibi-detection
  • 컴퓨터비전
  • UnboundLocalError
  • ckpt_file
  • TensorFlow
  • tune()
  • 기상탐사
  • encoding='utf-8'
  • PIL
  • 의료이미징
  • OpenCV
  • 영상처리
  • numpy
  • matplotlib
  • get_long_description
  • pip install labelme
  • 영상처리역사
  • labelme UnocodeDecodeError
  • 영상기술
  • maskimage
  • pytorch
  • ComputerVision
  • alibidetect
  • PYTHON
  • labelme
  • 딥러닝
  • unsupervised
  • 비지도학습
  • imageprocessing

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

Android - Activity Life Cycle 주요 함수와 화면 전환 방법
Android Studio

Android - Activity Life Cycle 주요 함수와 화면 전환 방법

2023. 1. 30. 13:13
728x90

활동 수명 주기 (Activity Life Cycle)

  • 단계 간에 전환하기 위해 활동 클래스는 6가지 콜백으로 구성된 핵심 집합
  • 활동이 새로운 상태에 들어가면 시스템은 각 콜백을 호출
  • 종류 : onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()
  •  

액티비티 (Activity)

  • 안드로이드에서 액티비티는 앱의 화면을 뜻함
  • 기능을 담당하는 Java 파일과 UI를 담당하는 xml 파일이 존재
  • 하나의 Java파일에 하나의 xml파일이 연결되어 하나의 화면을 구성

 

onCreate()

  • 이 콜백은 시스템이 먼저 활동을 생성할 때 실행되는 것으로 필수적으로 구현
  • 활동이 생성되면 생성됨 상태가 됨
  • 활동의 전체 수명 주기 동안 한번만 발생해야하는 기본 어플리케이션 시작 로직을 실행
  • 이 메서드는 이전 활동의 저장 상태가 포함된 Bundle 객체인 savedInstanceState 매개변수를 수신

 

onStart()

  • 활동이 사용자에게 표시되고 앱은 활동을 포그라운드에 보내 상호작용 할 수 있도록 준비
  • 활동이 시작됨 상태에 들어가면 시스템이 이 콜백을 호출, 콜백이 완료되면 재개됨 상태가 됨
  • 이 메서드는 매우 빠르게 완료되고 콜백이 완료되면 시스템이 onResume() 메서드를 호출

 

onResume()

  • 앱이 사용자와 상호작용, 어떤 이벤트가 발생하여 앱에서 포커가 떠날 때까지 앱이 이 상태에 머무름
    • 예를 들어 전화가 오거나, 사용자가 다른 활동으로 이동하거나, 기기 화면이 꺼지는 이벤트가 이에 해당
  • 활동이 재개됨 상태에 들어가면 포그라운드에 표시되고 시스템이 이 콜백을 호출
  • 방해되는 이벤트가 발생하면 활동은 일시중지됨 상태에 들어가고 시스템이 onPause() 콜백을 호출
  • 활동이 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 이 메서드를 다시 한번 호출
  • onResume()와 onPause()를 구현하여 활동이 전환될때마다 필요한 다른 초기화 작업도 수행해야 함

onPause()

  • 사용자가 활동을 떠나는 것을 나타내는 첫 번째 신호로 이 메서드를 호출, 활동이 소멸되지 않음
  • 활동이 포그라운드가 아닌 백그라운드에 있게 됨, 멀티 윈도우의 경우에는 여전히 표시 될 수 있음

onStop()

  • 활동이 사용자에게 더 이상 표시되지 않으면 중단됨 상태에 들어가고 시스템이 onStop() 콜백을 호출
    • 예를 들어 새로 시작된 활동이 화면 전체를 차지 할 경우에 적용
  • 시스템은 활동의 실행이 완료되어 종료될 시점에 이 메서드를 호출 할 수도 있음
  • 이 메서드에서는 앱이 사용자에게 보이지 않는 동안 필요하지 않은 리소스를 해제하거나 조정해야 함

 

onDestroy()

  • 활동이 소멸되기 전에 호출
    • 사용자가 활동을 완전히 종료하는 경우
    • 구성 변경으로 인해 시스템이 일적으로 활동을 소멸 시키는 경우
  • 활동이 소멸됨 상태로 전환하면 활동이 수신하는 마지막 콜백인 onDestroy() 콜백을 호출
  • 이전의 콜백에서 아직 해제되지 않은 모든 리소스를 해제해야 함

 

액티비티간의 화면 전환 방법 ( Intent와 startActivity 함수)

  • 인텐트 객체를 파라미터와 함께 생성
    • 첫번째 매개변수는 현재 액티비티, this 사용
    • 두번째 매개변수는 다른 액티비티, class 사용
  • startActivity( 인텐트 객체 ) : 지정한 액티비티로 이동
    • 단, 이동 전의 액티비티는 소멸되지 않기 때문에(onDestroy) 리소스 관리에 신경써서 구성

        button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 두번째 액티비를 실행시키는 코드 작성

                // 인텐트를 만든다!
                // 인텐트란 어떤 액티비티가 어떤 액티비티를 띄우겠다.
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });

코드 설계 (Android Studio)

  • MainActivity.java
package com.hyunsungkr.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 {

    Button button;

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

        Log.i("LifeCycleApp","OnCreate 함수 실행");
        button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 두번째 액티비를 실행시키는 코드 작성

                // 인텐트를 만든다!
                // 인텐트란 어떤 액티비티가 어떤 액티비티를 띄우겠다.
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });


    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("LifeCycleApp","OnStart 함수 실행");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("LifeCycleApp","OnResume 함수 실행");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("LifeCycleApp","OnPause 함수 실행");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("LifeCycleApp","OnStop 함수 실행");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("LifeCycleApp","OnDestroy 함수 실행");
    }
}
  • SeconndActivity.java
package com.hyunsungkr.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("LifeCycleApp","두번째 액티비티의 onCreate 함수 실행");
    }

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

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

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

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

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

Log 확인 결과

처음 실행 했을 때의 로그

두번째 액티비티 실행 버튼을 눌렀을 때의 로그

앱을 종료했을 때의 로그

'Android Studio' 카테고리의 다른 글

Android - SharedPreferences 공유 저장소에 데이터 저장하기  (0) 2023.01.31
Android - Activity 간의 데이터 전달 방법 (단방향/양방향) / Back(뒤로가기) 이벤트 처리 방법  (0) 2023.01.30
Android - CountDownTimer  (0) 2023.01.27
Android - AlertDialog 사용법  (0) 2023.01.27
Android - TextView의 setText함수에 숫자를 쉽게 넣어주는 방법 / todo  (0) 2023.01.26
    'Android Studio' 카테고리의 다른 글
    • Android - SharedPreferences 공유 저장소에 데이터 저장하기
    • Android - Activity 간의 데이터 전달 방법 (단방향/양방향) / Back(뒤로가기) 이벤트 처리 방법
    • Android - CountDownTimer
    • Android - AlertDialog 사용법
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바