본문 바로가기
Android/Concepts

Activity란?

by JuHy_ 2020. 3. 31.

Activity란?

안드로이드 앱은 크게 Activity, Service, Broadcast Receiver, Content Provider 4가지 컴포넌트로 구성된다.

각각의 컴포넌트들의 기능에 대해 간단히 설명하자면

 

Activity는 화면에 보여지는 부분의 기능,

Service는 화면이 없지만 동작하는 기능,

Broadcast Receiver는 시스템에서 전달하는 알림을 수신하는 기능,

Content Provider는 보안상의 문제로 선택적으로 시스템의 파일을 제공해주는 기능이라고 할 수 있다.

 

모든 컴포넌트는 앱에 추가할 때, Manifest에 추가하여 이 앱이 어떻게 구성되는지를 알려주어야 한다.

Manifest란 시스템이 앱을 설치할 때 앱을 파악하기 위한 설계도의 역할을 하는 파일이다.

 

Activity는 보여지는 화면에서 동작하는 기능들을 담당하며 xml 파일 하나와 소스 파일 하나로 구성된다.

Activity는 가장 많이 사용되는 컴포넌트로서 우리가 앱을 만들 때 주로 사용하게 된다.

 

 

Activity 구성

Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.juhy.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Manifest 파일을 살펴보면 크게 application 태그가 있고, 그 안에 앱에 관련된 정보들이 들어있다.

그리고 그 안에 activity 태그가 들어있는데 이로서 어떤 컴포넌트가 있는지 알 수 있다.

MainActivity 안에는 intent-filter 태그가 있는데 이 내용은 이 액티비티가 시작 지점이라는 뜻이다.

자세한 내용은 Intent 포스트로 별도로 작성하겠다.

 

Source Code (Java)

package com.juhy.myapplication;

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);

    }

}

앱을 처음 만들면 다음과 같이 Java 파일이 생성되는 것을 볼 수 있다.

여기서 MainActivity라는 이름으로 정의한 클래스가 AppCompatActivity를 상속받는 것을 볼 수 있다.

이는 우리가 만들 Activity의 이름인 MainActivity와 이것이 AppCompatActivity를 바탕으로 한다는 것이다.

 

클래스 내부에는 onCreate라는 함수가 하나 있는데 이는 생명주기의 하나로 별도의 글에서 작성하겠다.

이 안에는 setContentView라는 함수가 주어지고 이 함수를 통해 xml 파일과 소스 파일을 연결할 수 있다.

이 함수는 xml 파일을 inflation하여 그 안의 view들을 사용할 수 있게 해준다. (Inflation 포스트 참조)

 

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

</androidx.constraintlayout.widget.ConstraintLayout>

레이아웃은 그동안 다뤄왔듯이 화면 구성 정보를 담고 있다.

 

 

Activity 추가하기

새로운 Activity를 추가하기 위해서 Manifest, Source, XML을 직접 작성해도 되지만,

안드로이드 스튜디오에서는 자동으로 만들어주는 기능을 지원하고 있다.

 

좌측의 Project Explorer에서 app을 우클릭 한 후 New - Activity - Empty Activty를 클릭하면

 

맨 처음 앱을 만들 때 보았던 화면처럼 Activity와 XML 파일의 이름을 지정하는 화면이 나온다.

적절한 이름을 지정해준 뒤 Finish를 클릭하자.

 

그러면 자동으로 Manifest에 activity 태그가 추가되고, Source, XML도 생성되는 것을 볼 수 있다.

 

Activity 이동하기

새로운 Activity를 만들었다면 해당 Activity로는 어떻게 이동해야 할까.

이를 위해서는 Intent를 이용해야 한다.

Intent란 컴포넌트 간 이동을 도와주는 메신저라고 생각하면 된다. (자세한 내용은 별도 포스팅)

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="이동"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity에 버튼을 하나 만들어주고

 

package com.juhy.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

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

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), NewActivity.class);
                startActivity(intent);
            }
        });

    }

}

그 다음 버튼을 클릭했을 때 activity를 이동하도록 구성해보자.

intent 객체를 생성해주어야 하는데 이 때, 첫번째 파라미터로 context, 두번째 파라미터로 목적지를 넣어주어야 한다.

그 뒤 startActivity() 함수에 생성한 intent를 넣어주면 해당 activity로 이동할 수 있다.

 

그리고 새로운 activity에서 이전 activity로 돌아가고 싶다면 finish() 함수를 사용하면 된다.

이는 activity를 종료하는 함수인데 이를 사용하는 이유는 activity가 activity stack 안에 쌓이기 때문이다.

따라서 위에 올라온 activity를 종료하면 아래에 있는 activity가 드러나게 되는 것이다.

 

 

Reference

[부스트코스]안드로이드 프로그래밍

https://www.edwith.org/boostcourse-android

'Android > Concepts' 카테고리의 다른 글

Intent의 Flag 사용법  (0) 2020.04.02
Intent란?  (0) 2020.03.31
GridView 사용법  (0) 2020.03.24
Spinner 사용법  (0) 2020.03.24
ListView 사용법  (0) 2019.08.21