본문 바로가기

study/android

[android] Activity & Intent

728x90

Activity란

Activity는 화면에 UI를 표시하는 역할을 수행하는 주체이다.

 

Activity자체가 여러 개의 View 혹은 ViewGroup을 배치하면서 만든 UI를 띄워준다.  화면에 UI를 표시하기 위한 틀로 봐야 한다.

따라서 이때 UI는 Layout 리소스 XML 파일(R.layout.XXX)이거나, View나 ViewGroup이 와야 한다.

 

 

 

MainActivity 실행

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

처음 empty activity로 실행했을 때의 작업 환경이다.

안드로이드는 main함수의 개념으로 Activity를 상속받는 AppCompatActivity클래스를 상속받고 있는 MainActivity클래스를 찾고 onCreate() 메서드를 시작으로 Activity의 생애주기가 시작된다고 볼 수 있습니다.

 

여기서 setContentView() 함수를 통해 화면에 출력될 Layout 리소스 XML ID 또는 View 클래스를 지정할 수 있습니다.

처음 empty activity를 선택했을 때 default로 되어있는 것이 R.layout.activity_main인 것일 뿐이다.

 

 

onCreate의 parameter로 넘겨주는 Bundle객체가 궁금하다. Bundle은 사전적 의미로는 '묶음'이라는 의미가 있다. 안드로이드에서 사용되는 의미도 많이 다르지는 않다.

 

Bundle객체는 {키 : 값}을 갖는 해시 맵의 형태이다. 이 값을 저장할 수 있는 객체를 이용해서 Activity 간에 데이터를 주고받을 수 있다.

 

Bundle객체로 넘겨주는 savedInstanceState에 대한 내용은 링크에 있다.

 

 

 

일반 Activity 실행

위의 내용들은 MainActivity에 관한 내용이고 새로운 Activity를 시작하려면 어떻게 해야 하는지 알아보자.

 

새로운 Activity를 실행하기 위해선 두 가지의 방법이 있다.

 

첫 번째는 명시적인 방법으로 startActivity() 메서드를 사용해야 한다. 이때 parameter로 Intent객체를 넘겨주어야 한다. 무엇인가 Activity(행동)을 하기 위해서는 Intent(의도)가 있어야 한다. 이때 Intent가 실행하고자 하는 Activity의 class파일이다.

 

두 번째는 암묵적인 방법으로 직접 만든 Activity가 아닌 Activity를 실행하기 위한 방법이다. 제공되는 API를 이용하기 위한 방법으로 Intent객체 내의 멤버들을 이용해서 한다.

 

자세한 방법은 아래 참고에 첫 번째 링크에 가면 된다.

 

 

 

Intent vs Bundle

위에서 Bundle을 Activity 간의 데이터 전달을 하기 위해서 사용한다고 했다. 그런데 Activity를 실행하는 부분을 보면 explicit 한 방법으로 startActivity()를 호출할 때 Intent객체를 사용한다.

 

여기서 Intent로 데이터 전달을 하는 것이 아닌가 의문이 들었는데 둘은 다르다고 한다.

Intent는 '전송수단'의 의미이고, Bundle이 '전달하는 데이터'의 의미를 갖는다.

 

즉, 전달하려는 데이터를 박스(Bundle)에 담으면 택배기사(Intent)가 다른 Activity에게 전달하는 것이다. 

 

 

 

<참고>

https://recipes4dev.tistory.com/67

https://mattlee.tistory.com/73

https://m.blog.naver.com/PostView.nhn?blogId=saintw&logNo=100189010984&proxyReferer=https%3A%2F%2Fwww.google.com%2F

https://programmingsource.tistory.com/34

728x90

'study > android' 카테고리의 다른 글

[android] LayoutInflater & Factory Method  (0) 2019.09.17
[android] ViewPager & PagerAdapter + LayoutInflater  (0) 2019.09.17
[android] drawable  (0) 2019.09.17
[android] Toast 메시지 -Context  (0) 2019.09.08
[android] ListView  (0) 2019.09.08