본문 바로가기
Android

Android Studio, Java] 생명주기

by 김마리님 2020. 7. 21.

안드로이드와 액티비티에는 생명주기라는 것이 존재한다.

 

https://blog.naver.com/getinthere/221695412324

 

안드로이드 5강 - (1) What is Context?

1. Context 정의Application 환경에 대한 전역 정보를 접근하기 위한 인터페이스.Context를 통해 어플리...

blog.naver.com

 

안드로이드는 컴퓨터와 다르게 한 프로세스만 동작한다.

따라서, 우리가 화면을 내리게 되면 앱은 중지된다.

onCreate() - 액티비티 처음 만들어질 때 호출
- 화면에 보이는 뷰들의 일반적인 상태 설정
- 이전 상태가 저장되어 있는 경우에는 번들 객체를 참조하여 이전상태 복원 가능
-이 매서드 다음에는 항상 onStart()매서드 호출
onStart() - 액티비티가 화면에 보이기 바로 전에 호출
- 액티비티가 화면 상에 보이면 이 매서드 다음에 onResume() 매서드 호출
- 액티비티가 화면에서 가려지게 되면 이 매서드 다음 onStop() 매서드 호출
onResume() - 액티비티가 사용자와 상호작용하기 바로 전에 호출됨
onRestart() - 액티비티가 중지된 이후에 호출되는 메서드로 다시 시작되기 전에 호출됨
- 이 매서드 다음에는 항상 onStart() 매서드 호출
onPause() - 또 다른 액티비티를 시작하려고 할 때 호출
- 저장되지 안은 데이터를 저장소에 저장하거나 애니메이션 중인 작업을 중지하는 등의 기능 수행

onStop() - 액티비티가 사용자에게 더 이상 보이지 않을 때 호출됨
- 액티비티가 소멸되거나 또 다른 액티비티가 화면을 가릴 때 호출
- 액티비티가 이 상태면 강제 종료 가능
onDestroy() - 액티비티가 소멸되어 없어지기 전에 호출
- 이 매서드는 액티비티가 받는 마지막 호출
- 액티비티가 앱에 의해 종료되거나 시스템이 강제로 종료되는 경우 호출
- 위의 두 가지 경우를 구분할 때 isFinishing() 매서드 활용
- 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음.

 

예시 코드

package com.mary.lifecycleex01;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "Main_Activity";

    private String downloadData="";
    private String currentState="";

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart: ");

    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");
        currentState="에너지 50";
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
        Log.d(TAG, "onResume: 현재 에너지 : "+currentState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
        SharedPreferences pref=getSharedPreferences("prefer", Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor= pref.edit();
        editor.putString("currentState",currentState);
        editor.commit();

    }

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

        SharedPreferences pref=getSharedPreferences("prefer", Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor= pref.edit();
        currentState=pref.getString("currentState","");
        Log.d(TAG, "onCreate: "+currentState);

        //다운로드 시작
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    for (int i=1; i<4; i++) {
                        Thread.sleep(1000);
                        Log.d(TAG, "run: "+i+"초");
                    }
                    downloadData="다운 받은 데이터";
                    Log.d(TAG, "run: 다운로드 종료");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        Log.d(TAG, "onCreate: ");
    }
}

반응형