Hun's Blog

[Android] 안드로이드 4대 컴포넌트 - Activity 본문

Android

[Android] 안드로이드 4대 컴포넌트 - Activity

jhk-im 2020. 3. 21. 23:38

4대 컴포넌트



- Activity
- Service
- Broadcast Receiver
- Content Provider

각 컴포넌트는 하나의 독립된 형태로 존재하며, 정해진 역할을 수행한다.
컴포넌트 간에 Intent라는 일종의 메시지 객체를 사용하여 상호 통신을한다.
가장 많이 사용하는 컴포넌트는 액티비티이며 나머지 컴포넌트도 매우 중요하므로 어떠한 기능을 담당하는지 파악해두어야 한다.

이미지1 안드로이드 4대 컴포넌트와 인텐트 

 

Activity

- 액티비티는 UI 화면을 담당하는 컴포넌트이다.
- 안드로이드 애플리케이션은 반드시 하나의 액티비티를 가지고 있어야 한다.
- 각 액티비티는 매니페스트 파일에 등록 되어 있어야 한다.
- 액티비티는 하나 이상의 view를 가질 수 있다.


Activity Lifecycle
액티비티는 프로그램의 상태에 따른 생명주기를 갖는다.
각각의 상태에 따라 호출되는 콜백 메소드가 따로 있다.

 


1. onCreate()

1
2
3
4
5
6
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.e("onCreate","Create!");
}
 

최초 액티비티를 생성, 초기화, setContentView()를 호출하여 액티비티에 UI를 표시한다.
안드로이드 스튜디오에서 액티비티를 생성하면 activity.java 내부에 자동으로 생성함

 

2. onStart()

1
2
3
4
5
@Override
protected void onStart() {
    super.onStart();
    Log.e("onStart","Start!");
}
 

onCreate() 다음으로 호출되는데 이 시점부터 사용자가 액티비티를 볼 수 있다.

 

3. onResume()

1
2
3
4
5
@Override
protected void onResume() {
    super.onResume();
    Log.e("onResume","Resume!");
}
 
s

액티비티가 실제 사용자와 상호작용이 가능한 포그라운드에 위치했을때 호출된다.
이 상태를 액티비티가 실행 중인 상태이다.

 


4. onPause()
액티비티가 사용자와 상호작용이 불가능한 상태가 될 때 호출된다.

1
2
3
4
5
@Override
protected void onPause() {
    super.onPause();
    Log.e("onPause","Pause!");
}
 

 


5. onStop()
액티비티가 더이상 보이지 않을 때 호출된다.

 

1
2
3
4
5
@Override
protected void onStop() {
    super.onStop();
    Log.e("onStop","Stop!");
}
 

 

6. onDestroy()
액티비티가 종료되거나 앱이 종료되면 호출된다.

1
2
3
4
5
@Override
protected void onDestroy() {
    super.onDestroy();
    Log.e("onDestroy","Destroy!");
}
 
 

 

이미지2 액티비티 생명주기


처음 앱이 켜졌을때 onResume() 까지 한번에 실행된다.

이미지3 안드로이드 Logcat


새로운 액티비티가 최상단으로 올라와 기존 액티비티가 완전히 보이지 않게되면 onPause()에 이어 onStop()까지 바로 호출된다. 새로운 액티비티가 최상단으로 올라오면 기존 액티비티는 더이상 사용자와 상호작용 할 수 없기 때문에 onPause()가 실행이 되고 새로운 액티비티에 가려져 더이상 보이지 않기 때문에 onStop() 까지 실행된다.

이미지2 에보면 onRestart() 가 보인다.

 

 

onRestart()

1
2
3
4
5
@Override
protected void onRestart() {
    super.onRestart();
    Log.e("onRestart","Restart!");
}
 
 

액티비티가 완전히 가려져 onStop()이 호출되고 다시 재활성화 되었을때 호출된다.

onPause -> onStop -> onRestart -> onStart -> onResme

 

이미지3

잠깐 홈 화면으로 이동하거나 다른앱을 켰다가 다시 테스트 앱으로 이동했을때 이미지3 과 같은 흐름을 보여준다. 앱을 종료하면 onDestory가 실행된다.

 

Intent



- 앱 컴포넌트가 무엇을 할 것인지 담는 메시지 객체
- 다른 컴포넌트를 실행하기 위함 (혹은 이동)
- 다른 컴포넌트로 이동하거나 실행 시 데이터를 주고받기 위함


Activity에서의 Intent 

액티비티는 하나의 화면이다. 즉, 새로운 화면을 띄운다는 것은 새로운 액티비티를 띄우고 이전 액티비티를 닫는 과정과 같다.  실제 앱이 동작하는것을 보면 한 화면에서 띄어야 할 화면이 여러개인 경우도 있고 현재 화면에서 다른 화면으로 이동하고 이동한 화면에서 특정 데이터를 다시 돌려받아 돌아오는 겨우 등 다양한 케이스를 고려하여 작업한다.

즉, 인텐트는 단순히 액티비티를 띄어주는 것이 아니라 데이터를 전송하거나 전송된 데이터를 응답받아 처리하는 코드등을 도와주는 것이다.

 


새로운 액티비티로 text 전송하기 예제

1. app 우클릭 -> new -> activity -> SecondActivity 생성

2. activity_main.xml  -  button ,  editText 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
 
<EditText
    android:id="@+id/editText"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
 
    app:layout_constraintEnd_toStartOf="@+id/button"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
 

3. activity_second.xml  - TextView 생성

1
2
3
4
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
 

4. MainActivity.java - onCreate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("onCreate","Create!");
 
        button = findViewById(R.id.button);
        editText = findViewById(R.id.editText);
 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!editText.getText().toString().equals("")){
                    intent = new Intent(getApplicationContext(),SecondActivity.class);
                    intent.putExtra("intent_text",editText.getText().toString());
                    startActivity(intent);
                }
            }
        });
    }
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

5. SecondActivity.java - onCreate

1
2
3
4
5
6
7
8
9
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    Log.e("Second_onCreate","Second_Create!");
    textView = findViewById(R.id.textView);
    Intent intent = getIntent();
    textView.setText(intent.getStringExtra("intent_text"));
}
 
 

 

이미지 4 Main 화면 

 

Hi 입력후 버튼클릭

 

이미지 5 Second 화면 

Second 화면으로 이동하고 Textview에 Hi 띄움 



생명주기 확인

이미지 6 logcat 


second 화면으로 이동했을때의 결과다.
메인 화면에서 onPause가 호출되고 second 화면으로 이동한다.
second 화면에서 onCreate 가 활성화되고 메인화면은 onStop이 호출된다.

이미지 7 logcat 

 

second 화면에서 뒤로가기 버튼을 눌러 메인으로 이동했을때의 결과다.
onRestart -> onStart -> onResume


액티비티 생명주기
액티비티는 생명주기를 갖는다.  각각의 상태를 메소드별로 나눠서 이해해보자
1. 사용자가 액티비티를 실행 - onCreate 
2. 액티비티의 뷰가 사용자 눈에 보인다 - onStart
3. 액티비티를 사용자가 이용중이다 - onResume
4. 사용자가 다른 화면을 보고자 한다 - onPause
5. 액티비티가 사용자 눈에 보이지 않는다 - onStop
6. 사용자가 액티비티를 다시 보고자한다 - onRestart
7. 사용자가 앱을 종료했다 - onDestory


Intent 란 기본적으로 컴포넌트간 이동과 데이터 전송을 해주는 객체이다. 
액티비티로 예를 들어보면 액티비티는 하나의 화면이라 할 수 있고 새로운 화면을 띄우는 것은 액티비티를 이동하는 것과 마찬가지다. 인텐트의 역할이 컴포넌트 간의 이동과 데이터 전송이라 했으니 액티비티에서 화면전환이 이루어질때 인텐트를 사용해야 한다.  화면이동시 데이터를 담아 이동할 곳으로 데이터를 보내주는 '전송'의 역할과 이동할 곳의 액티비티에서는 데이터를 '응답'받아 꺼내어 사용하는 처리까지도 인텐트 객체가 지원해준다. 




참고
https://coding-factory.tistory.com/203
https://brunch.co.kr/@mystoryg/80
https://developer.android.com/reference/android/app/Activity
https://juyoung-1008.tistory.com/34
https://coding-restaurant.tistory.com/98
https://designthing.net/the-basic-components-in-an-android-app/

 

Activity  |  Android 개발자  |  Android Developers

 

developer.android.com

 

안드로이드 액티비티 생명주기(Life Cycle)

4대 컴포넌트 | 안드로이드 액티비티 생명주기 액티비티는 안드로이드 4대 컴포넌트 중에 하나이다. 그중에서도 UI와 가장 밀접한 관련을 가지고 있기 때문에 사실상 안드로이드 앱에 있어서 가장 기본이 되는 구성 요소이다. 보통 앱은 하나 이상의 액티비티가 서로 연결된 형태로 구성된다. 우리가 많이 사용하는 카카오톡을 예로 들어보자. 처음 실행을 하면 카카오톡 로고 화면이

brunch.co.kr

 

안드로이드 4대 컴포넌트란 무엇인가?

개발자가 되기위한 첫 걸음 안드로이드 4대 컴포넌트 안드로이드의 4대 컴포넌트란? 안드로이드의 주요 4대 컴포넌트는 액티비티(Activity), 서비스(Service), 브로드캐스트 리시버(Broadcast Receiver), 콘텐트..

juyoung-1008.tistory.com

 

안드로이드 서비스 정의와 생명주기

안드로이드 서비스 서비스(Service) 일반적으로 화면 없이 동작하는 프로그램으로 백그라운드 프로세스(Background Process)라고도 한다. 액티비티 응용 프로그램은 화면(액티비티)이 종료되면 동작하지 않지만 서..

coding-restaurant.tistory.com

 

[Android] 인텐트(Intent) 화면 간 이동과 데이터 전달

어플리케이션을 만들때 하나의 화면을 가지고 어플리케이션을 만들지는 않죠. 하나의 화면에 모든기능을 담기란 불가능합니다. 대부분의 어플리케이션은 많은 View를 모으고 모아서 만든 결과물입니다. 그래서 안..

coding-factory.tistory.com