본문으로 바로가기

안드로이드 생명주기

category JAVA 2018. 7. 30. 17:54

안드로이드 액티비티의 상태


안드로이드에서 액티비티는 어플리케이션 컴포넌트로서,

창이 하나씩 주어져 이곳에 사용자 인터페이스(UI)를 끌어올 수 있습니다


한 액티비티가 새로운 액티비티의 시작으로 인해 중단된 경우,

이 상태 변경은 수명주기 콜백 메서드를 통해 알려진다 .

따라서 , 액티비티가 가질수 있는 상태와 이 상태 변화에 따른 콜백메서드에는 

어떤것이 있는지 수명주기를 통해 알아 보자



상태 

 설명 

실행 (Runnig)

화면 상에 액티비티가 보이면서 실행되어 있는 상태 액티비티 스택의 최상위에 있으며 포커스를  가지고 있음

 일시정지(Paused)

사용자에게 보이기는 하지만 다른액티비티가 위에있어 포커스를 받지 않는 상태,대화상자가 위에  있어 일부가 가려지는 경우에 해당 

 중지 (Stopped)

다른 액티비티에 의해 완전히 거려져 보이지 않는 상태 


액티비티의 상태는 위의 표와 같이 3가지의 상태를 가짐.


안드로이드 액티비팉 생명주기 

액티비티가 처음실행되어 메모리에 만들어지는 과정이 onCreate()에 해당 된다.

이후 onStart(),onResume()메소드를 거쳐 실행(Running)상태가 되고,

다른 액티비티가 상위에 오게되면 onPaus()가 호출되면서 일시정지(Paused)상태로,

onStop()을 통해 중지(Stopped)상태로 변하게 된다 .

마지막으로 앱을 종료하여 메모리에서 없어질 경우에 onDestroy()메소드가 호출됩니다 



 상태 메소드 

설명  

onCreate() 

액티비티를 생성할 때 호출  

액티비티의 필수 구성 요소를 초기화 

setContentView()를 통해UI레이아웃을 정의 

번들 객체를 참조하여 이전 상태를 복원 가능 

onStart() 

 액티비티가 화면에 보이기 바로전에 호출 

onResume() 

액티비티가 사용자와 상호작용하기 바로 전에 호출  

onRestart() 

액티비티가 중지된 이후에 호출되는 메소드로

다시 시작되기 바로전에 호출  

onPause() 

사용자가 액티비티를 떠난다는 첫 번째 신호 

저장되지 않은 데이터를 저장소에 저장하거나 

진해 중인 작업을 중지하는 증의 기능을 수행

(사용자가 졸아오지 않을 수 있기 때문에)

액티비티가 이 상태에 들어가면 액티비티 강제종료 가능 

onStop() 

액티비티가 사용자에게 더 이상 보이지 않을 때 호출 

 액티비티가 소멸되거나 다른 액티비티가 가릴 때 호출 

onDestroy() 

액티비티가 소멸되어 없어지기 전에 호출 

어플리케이션에 의해 종료되거나 강제 종료 시에 호출  



finish()메소드 =finishActivity()메소드를 통해 해당 액티비티를 명시적으로 종료 할 수 있으나,Android에서는 시스템이 액티비티의 수명을 대신 관리

해주므로 직접 종료하지 말것을 권장


생명주기 메서드 구현

위에서 살펴본 수명주기 메서드는 다음과 같이 오버라이딩 해서 사용합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.example.user.myapplication;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
 
public class MainActivityfalse extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activityfalse);
        Toast.makeText(MainActivityfalse.this"onCreate ...", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        Toast.makeText(MainActivityfalse.this"onStart ...", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        Toast.makeText(MainActivityfalse.this"onResume ...", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    protected void onPause() {
        super.onPause();
        Toast.makeText(MainActivityfalse.this"onPause ...", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        Toast.makeText(MainActivityfalse.this"onStop ...", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Toast.makeText(MainActivityfalse.this"onDestroy ...", Toast.LENGTH_SHORT).show();
    }
}
 
 
cs


위에서 설명한 것 처럼 onCreate()에서 Bundle savedInstanceState를 통해 이전 상태를 불러오고, 

 setContentView(R.layout.activity_main_activityfalse);을 통해 사용자 인터페이스 레이아웃을 정의한다

이후에 Button같은 구성요소가 있다면 findViewByld()를 통해 바인딩 해야 합니다 

 


수명주기 메서드가 호출되는 되는 과정은 다음과 같습니다.
1. 생성할 때 : onCreate()  onStart()  onResume()
2. 소멸할 때 : onPause() → onStop()  onDestroy()




'JAVA' 카테고리의 다른 글

[JAVA][미완성]  (0) 2018.07.10
[JAVA][사칙연산]  (0) 2018.07.08
[JAVA][절대경로와 상대경로]  (0) 2018.04.16
[JAVA][ 성적관리 프로 그램]  (0) 2018.04.13
성적 관리 프로그램  (0) 2018.04.12