티스토리 뷰

Android

[Android] 액티비티의 생명주기

감자형 2017. 9. 22. 00:24
  • 액티비티의 수명주기란?(생명주기)
life cycle이란? 사람이 살아가면서 태어날 때까지의 과정


  • 앱이라는게 한개만 실행되어있는게 아니라 이전에 실행되어있는 액티비티도 있고, 추후에 실행하면 스택에 계속쌓이기 때문에 중지되거나, Paused 상태가 되거나, 중지(Stopped)상태로 구분이 된다. 
각각의 상태가 중요한 역할을 하는데, 고스톱 게임중에 전화가 오면, 전화가 오는화면이 고스톱을 가리게 되는데 게임이 갑자기 스택으로 들어가버리게 되고 실행상태가 종료가 되어버린다. 그리고 CPU가 부족하면 중지되어있는 화면을 중지로 꺼버리게 되어버린다. 이러한 경우에 개발자가 게임을 개발할때, 게임이 스탑되는 상태를 알려준다. 이때, 콜백함수로 알려주게 된다. 그때, 전화가 종료되고나면 다시 스택에 쌓여있던 액티비티가 나타나게된다.

처음에 Activty가 만들어지고 그때 onCreate가 호출이 된다. onCreate를 재정의 해주면 시스템이 자동으로 실행을 시켜준다. xml의 뷰들을 객체화되고나서 그 View객체를 찾는다거나 초기화관련된것을 찾아준다. 그리고 상태에 따라서 재시작되거나 하는 메소드가 있는데, 이것을 재정의하게 되면 각각의 상태마다 자동 호출된다.


  • 직접 이 예제를 작성해 보도록하자. 액티비티 생명주기 예제) Example_Lifecycle 프로젝트 화면이 뜰때 어떠한 형태가 되는지 알아보자.
  • 예제 순서)
1
2
3
4
5
6
7
8
9
10
1. button 추가 ("화면 닫기")
main.java에 소스 추가
 
2. 밑에 공백을 커서로 둔다음에 -> 오른쪽 마우스 -> generate -> override Method 선택
-> onDestroy(), onStart(), onStop(), onPause(), onResume() 추가 시키기 가장많이 쓰이는것들
 
3. 각각 이것들이 언제 쓰이는것들이 언제 쓰이는지를 확인해 보자.
각각 토스트 메시지를 띄워서 확인해 보자.
 
4. 지금까지 진행한것들 소스 
cs
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
48
49
50
51
52
53
54
55
56
57
58
package com.example.example_lifecycle;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Toast.makeText(this"onCreate 호출 됨",Toast.LENGTH_LONG).show();
        // Activity가 Context 역할을 하기때문에 this로 놓아도 된다.
 
 
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish(); // 화면 닫기
            }
        });
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        Toast.makeText(this"onResume 호출 됨",Toast.LENGTH_LONG).show();
    }
 
    @Override
    protected void onPause() {
        super.onPause();
        Toast.makeText(this"onPause 호출 됨",Toast.LENGTH_LONG).show();
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        Toast.makeText(this"onStop 호출 됨",Toast.LENGTH_LONG).show();
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Toast.makeText(this"onDestroy 호출 됨",Toast.LENGTH_LONG).show();
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        Toast.makeText(this"onStart 호출 됨",Toast.LENGTH_LONG).show();
    }
}
cs
  • 이제 이것들이 어떻게 동작 될까?
1
2
3
4
5
onDestroy()
onStart()
onStop() 
onPause()
onResume()
cs




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1. 어플리케이션을 실행하면
 -> onCreate -> onStart() -> (화면보여주기 전에)onResume() 호출됨
 
2. 화면 닫기 
-> onPause (포커스를 잃을때)-> onStop(다 중지되었을 때)-> onDestory (리소스가 모두 사라진다)
 
3. Main에서 Menu 화면을 띄울 경우에는 -> Main화면에서는 onPause() -> onStop -> 다시 실행된다고 하면 onResume() 이 사용된다(이때 onDestory() 리소스를 완전히 잃을때 호출되므로 스택에 남아 있게된다.)
 
4. 이런것들을 생명주기 메소드라고 한다.
 
5. Activity 라는것을 보면 항상 떠있는것이 아니다.
 
실행 -> 중지 (onPause)
중지 -> 실행 (onResume)
게임에서 점수 저장할때 onPause()
게임에서 점수 복구할때 onResume()
이라고 생각하면 쉽다.
cs


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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
글 보관함