앱을 실행하면 프로세스가 하나 실행되고 그 위에는 vm이 만들어지며, vm 위에서 앱이 실행된다
만들어본 앱에서 시스템으로 인텐트를 보내서 전화 앱을 띄울 수 있었다
이렇게 하면 전화 앱은 별도의 프로세스로 동작하게 된다
전화 앱의 화면에서 시스템 [back] 키를 누르면 자연스럽게 앱 화면으로 돌아가게 된다
그런데 프로세스는 하나의 독립정인 상자와 같아서 프로세스 간의 정보 공유는 어렵다
그래서 앱에는 태스크라는 것이 만들어진다
태스크는 앱이 어떻게 동작할지 결정하는데 사용되며, 프로세스처럼 독립적인 실행 단위와 상관없이 어떤 화면들이 같이 동작해야 하는지 흐름을 관리할 수 있다
시스템이 알아서 태스크를 관리하지만 직접 제어해야 하는 경우가 생길 수 있다
이를 위해 AndroidManifest.xml에 액티비티를 등록할 때 태스크도 설정할 수 있다
activity_main.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">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="첫 번째 화면"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="184dp"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity
package com.example.a26_sampletask;
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(), MainActivity.class);
startActivity(intent);
}
});
}
}
앱을 실행하고 버튼을 누를 때마다 첫 화면이 반복해서 뜨게 된다
시스템 [back] 버튼을 누르면 동일한 화면이 여러개 중첩되어 떠 있는 것을 확인 할 수 있다
AndroidManifest.xml을 보면
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity">은
<activity android:name=".MainActivity" android:launchMode="standard">와 같다
이것은 태스크가 새로 뜨는 화면을 차례대로 스택에 넣어서 관리한다
<activity android:name=".MainActivity" android:launchMode="singleTop">으로 하면 MainActivity가 한 번만 생성된다
이 경우 MainActivity 쪽으로 전달되는 인텐트는 onNewIntent 메소드로 전달받아야 한다
launchMode를 singleTask로 하면 액티비티가 실행되는 시점에 새로운 태스크를 만들게 되고,
singleInstance로 설정하면 액티비티가 실행되는 시점에 새로운 태스크를 만들면서 그 이후에 실행되는 액티비티들은 이 태스크를 공유하지 않도록 한다
'안드로이드' 카테고리의 다른 글
프래그먼트 (0) | 2021.10.18 |
---|---|
라이프사이클 (0) | 2021.10.18 |
Paracelable 다른 참고 자료 (0) | 2021.10.14 |
데이터 전달, Parcelable (0) | 2021.10.14 |
로그인 화면과 메뉴 화면 전환 (0) | 2021.10.14 |