메뉴 건너뛰기

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

안드로이드에서 액티비티(Activity)는 애플리케이션의 컴포넌트(Componenet)를 의미합니다. 우리가 앱을 사용하면서 보는 화면이 액티비티를 의미하며 사용자와의 상호작용을 위한 UI를 올릴 수 있습니다. 액티비티는 일반적으로 화면을 가득 채우지만 작은 화면으로 만들어 다른 화면 위에 띄우는 것도 가능합니다. 

 

하나의 앱에는 보통 여러개의 액티비티가 존재합니다만, 보통 하나의 앱에서 하나의 액티비티가 Main으로 설정이 되어 앱을 처음 구동하였을 때 가장 먼저 화면에 표시되는 액티비티가 됩니다. 그러다가 사용자가 앱을 자유롭게 사용하면서 필요에 따라 다른 Sub 액티비티가 실행이 됩니다. 이때 Main 액티비티는 실행이 중단되지만 시스템은 해당 액티비티를 스택(Stack)에 Push를 하고 Sub 액티비티를 실행하게 됩니다. 

 

* 스택은 특정 데이터가 메모리에 쌓이는 형태를 가지는 구조입니다. 마치 박스에 물건을 쌓는 것과 비슷합니다. 박스에 물건을 하나씩 쌓고 박스로부터 물건을 꺼낼 때는 가장 나중에 들어간 물건이 먼저 나오고 가장 먼저 들어간 물건이 가장 나중에 꺼내집니다. 자료구조에서 스택(Stack)도 마찬가지입니다. 가장 먼저 들어간 (Push 된) 데이터가 가장 나중에 꺼내집니다.(pop) 이를 "후입 선출"이라고 부릅니다. 

 

 

 

 

Sub 액티비티가 실행되고 해당 화면에 포커스가 맞춰지는 경우에 Main 액티비티는 Stack에 Push가 됩니다. 이때 사용자가 Sub 액티비티에서 이전 버튼을 클릭하게 되면 Main 액티비티를 다시 Stack으로부터 Pop 되어 재개(resume)됩니다. 

 

Sub 액티비티가 실행되고 실행이 중단된 Main 액티비티의 상태 변화는 액티비티 생명주기 콜백 메소드에 의해서 알려지게 됩니다. 액티비티가 중단되는 경우만이 아니라 시스템은 액티비티의 다양한 상태 변화에 대해서 콜백 메서드를 통해 알려줍니다. 이는 아래에서 좀 더 살펴보도록 하겠습니다.

 

1. 액티비티 생명주기 함수 

액티비티의 생명주기 관련 함수를 구현하여 액티비티 생명주기를 관리하는 것은 유연한 어플리케이션을 개발하는 데 있어서 매우 중요한 역할을 담당합니다. 액티비티는 기본적으로 다음과 같은 세 가지 상태에 머무릅니다.

public class MainActivity extends AppCompatActivity {

    ArrayList<SampleData> movieDataList;

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

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

- onCreate() 함수

 

액티비티가 처음 생성될 때 호출되는 함수입니다. 처음 프로젝트를 생성하면 MainActivity에서 자동으로 생성해줄 만큼 액티비티 생명주기에 있어서 중요한 함수입니다. 해당 함수에서는 액티비티를 실행하기 위하여 정의된 사용자 UI를 올리기 위해 레이아웃 리소스 파일을 읽어와 객체를 생성하고 각종 초기화 작업을 진행하게 됩니다. 해당 함수 수 호출 후에는 항상 onStart() 함수가 같이 호출됩니다.

 

- onStart() 함수

 

액티비티가 사용자에게 표시되기 직전에 호출되는 함수입니다. 액티비티가 표시되면 onResume() 함수가 뒤따라 호출됩니다. 

 

- onResume() 함수

 

액티비티가 시작되고 사용자와 상호작용을 시작하기전에 호출되는 함수입니다. 이 시점에 액티비티는 스택의 가장 상위에 존재하고 있고 해당 함수 뒤에는 onPause() 함수가 뒤따라 호출됩니다.

 

- onPause() 함수

 

해당 액티비티에서 다른 액티비티로 전환되기 직전에 호출되는 함수입니다. 보통 해당 함수에서는 아직 저장되지 않은 데이터를 유지하기 위해 데이터를 저장하거나 시스템 자원을 소모하는 작업을 진행하는 경우 중단할 때 사용됩니다. 예를 들어 동영상을 재생하고 있었다가 다른 액티비티를 전환되는 경우 해당 함수에서 동영상을 멈추도록 하는 구현이 들어갈 수 있습니다. 해당 함수가 끝나기 전까지 액티비티 전환이 이루어지지 않기 때문에 해당 함수는 빠르게 작업이 이루어져야 합니다. 액티비티가 다시 표시되기 시작하면 (전환된 액티비티에서 이전 버튼 클릭) 다시 onResume() 함수가 호출되고 전환된 액티비티에 의해 액티비티가 가려지게 되면 onStop() 함수가 호출됩니다.

 

- onStop() 함수

 

액티비티가 사용자에게 표시되지 않을 때 호출됩니다. 해당 함수는 액티비티가 소멸되는 경우에 호출될수도 있고 또는 다른 액티비티로 전환되면서 호출되는 경우도 있습니다. 사용자에게 다시 표시되기 상호작용이 가능한 상태가 될 경우 onRestart() 함수가 호출됩니다. 

 

-onDestroy()

 

액티비가 소멸되기전에 호출되는 함수입니다. 시스템이 메모리 확보를 위해 인스턴스를 제거하는 경우가 있고 또는 finish() 함수를 호출한 경우에 호출되는 함수입니다.

 

 

 

▼ 액티비티가 중단되거나 일시정지 상태일 경우에 액티비티의 상태는 그대로 유지됩니다. 액티비티 객체가 일시 정지가 되더라도 메모리상에는 그대로 남아 있기 때문입니다. 즉 해당 액티비티가 다시 재개(Resume) 상태로 넘어가게 돼도 이전에 작업했던 정보를 그대로 가지고 있습니다. 다만 시스템이 메모리 복구를 위해 해당 액티비티를 소멸시키는 경우는 메모리상에서 액티비티 객체를 지워버리기 때문에 상태를 유지한 채로 액티비티를 재개할 수 없습니다. 즉 생명주기 단계에서 onCreate()를 시작으로 하여 액티비티를 새로 생성하게 됩니다. 


List of Articles
번호 제목 날짜 조회 수
237 카카오톡 분석하기 (1) - sqlite 파해치기 file 2016.05.26 10452
236 카카오톡 대화내용 가져오기(sqlite3, chat_logs) file 2016.05.26 15125
235 초기화면 페이지를 만들어보자. splash 페이지 제작 file 2020.12.14 285
234 체크 박스(CheckBox)의 이미지 바꾸기 2015.07.16 6398
233 줄바꿈 문자 치환 2020.12.14 289
232 전화 인텐트와 나의 전화 번호가져오기 2014.08.28 6312
231 인텐트를 이용한 Activity간 데이터 전달 (사용자 정의 클래스) file 2015.07.16 7061
230 이미지의 Orientation를 체크해서 이미지 회전하기 2015.07.16 7658
229 이미지 버튼(ImageButton) 만들기 2015.07.16 7114
228 이미지 버튼 설정 2015.07.16 6378
227 위젯 업데이트 주기 빠르게 하기 2018.10.02 2142
226 월별 캘린더에 일정 입력 및 조회 기능 리스트로 추가하기 file 2015.07.16 18552
225 옵션 메뉴 동적으로 생성하기 2015.07.16 6926
224 어댑터 뷰(Adapter View) & 어댑터(Adapter) (1) file 2016.06.08 7852
223 앱 번들(Android App Bundle) 만들기 file 2021.09.14 305
222 암시적 인텐트를 사용한 인터넷열기, 전화걸기, 문자보내기 [Intent (인텐트)] file 2016.06.07 7736
221 알아놓으면 좋은 내용정리 2016.06.07 7458
220 안드로이트 비콘 스캐닝시 고려 사항 2015.07.26 6658
219 안드로이드용 채팅프로그램 클라이언트(java), 서버(c#) 소스 file 2016.05.19 11723
218 안드로이드와 mysql 연동시키기. php 와 json 사용 file 2015.07.16 24488
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved