일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- unit test
- LinkedList
- 우분투 파이썬
- Design Pattern
- prisma
- 안드로이드 테스트
- 웹크롤링
- Data structure
- ubuntu python
- 자바
- 자바기초
- Apollo GraphQL
- Android
- Nexus GraphQL
- MVVM pattern
- 안드로이드 디자인패턴
- java
- mvvm
- graphQL
- 파이썬 크롤링
- 유니티
- 안드로이드 mvp
- 안드로이드
- Android test
- Apollo Server
- PYTHON
- Dependency Injection
- dagger-hilt
- Kotlin
- flutter
- Today
- Total
Hun's Blog
[Android] 안드로이드 4대 컴포넌트 - Activity 본문
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/
'Android' 카테고리의 다른 글
[Android] Android Test 2 - Unit Test (JUnit) (0) | 2020.03.22 |
---|---|
[Android] Android Test 1 - Android Test란 무엇인가? (0) | 2020.03.22 |
[Android] 안드로이드 4대 컴포넌트 - Content Provider (0) | 2020.03.22 |
[Android] 안드로이드 4대 컴포넌트 - Broadcast Receiver (0) | 2020.03.21 |
[Android] 안드로이드 4대 컴포넌트 - Service (0) | 2020.03.21 |