본문 바로가기
ANDROID/Android 앱 프로그래밍

[Android] 태스크(Task) 관리

by 주 녕 2021. 5. 25.
728x90

모든 내용은 Do it! 안드로이드 앱 프로그래밍을 바탕으로 정리한 것입니다. 

 

태스크(Task)

앱을 실행하면 그 앱은 하나의 프로세스 위에서 동작함

프로세스가 하나 실행되고 그 위에 VM(Virtual Machine)이 만들어지고, VM 위에서 이 실행됨

 

 현재 앱에서 전화 앱(다른 별도의 프로세스)으로 갔다가 다시 현재 앱으로 돌아오는 경우?

💡 프로세스는 독립적인 것이라 프로세스 간의 정보 공유가 어려움. 따라서 태스크를 사용해서 앱이 어떻게 동작할지 결정해야 함.

→ 태스크를 이용하면 프로세스처럼 독립적인 실행 단위와 상관없이 어떤 화면들이 같이 동작해야 하는지 흐름을 관리할 수 있음

 

프로세스와 태스크

  • 하나의 프로세스에서 다른 프로세스를 띄우려면 시스템의 도움이 필요함
  • 시스템에서 이런 액티비티의 각종 정보를 저장해두기 위해 태스크를 만듦
  • 직접 제어해야 하는 경우에는 Android Manifest.xml에 액티비티를 등록할 때 설정할 수 있음

[예제]

TaskActivity.java

public class TaskActivity extends AppCompatActivity {

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

        Button button = findViewById(R.id.task_btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), TaskActivity.class);
                startActivity(intent);
            }
        });
    }
}
  • 해당 코드를 실행하고 버튼을 누를 때 마다 현재 화면이 반복해서 뜨게 됨
  • 시스템 [Back] 버튼을 누르면 동일한 화면이 여러 개 중첩되어 떠 있는 것을 확인할 수 있음

AndroidManifest.xml

    <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/Theme.DoitAndroid">
        <activity android:name=".TaskActivity"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
  • 같은 화면이 반복해서 스택에 쌓이는 것은 launchMode의 값이 standard인 것
  • launchMode를 singleTop을 설정하면 태스크의 가장 위에 있는 액티비티는 더 이상 새로 만들지 않음
    • 인텐트 플래그의 FLAG_ACTIVITY_SINGLE_TOP으로 설정했던 것과 같은 효과
    • 앱을 실행하고 버튼을 눌러도 새롭게 화면이 생성되지 않고, 시스템 [Back] 버튼을 눌렀을 때도 바로 앱 화면이 사라짐
    • 이러한 경우에는 TaskActivity 쪽으로 전달되는 인텐트는 onNewIntent() 메서드로 전달받아야 함

standard와 singleTop

 

launchMode 속성 값을

  • singleTop : 태스크의 가장 위쪽에 있는 액티비티는 더 이상 새롭게 만들지 않음
  • singleTask : 이 액티비티가 실행되는 시점에서 새로운 태스크를 만들게 됨
  • singleInstance : 이 액티비티가 실행되는 시점에서 새로운 태스크를 만들면서 그 이후에 실행되는 액티비티들은 이 태스크를 공유하지 않도록 함

→ 경우에 따라 액티비티를 띄우면서 태스크를 새로 만들도록 설정해야 한다는 점을 기억하자!

 

 

 

* FLAG_ACTIVITY_SINGLE_TOP과 같은 플래그는 아래 포스팅 참고!

 

[Android] 플래그(flag)와 부가 데이터(Extra Data)

모든 내용은 Do it! 안드로이드 앱 프로그래밍을 바탕으로 정리한 것입니다. 액티비티로 만든 화면이 한 번 메모리에 만들어졌는데도 계속 startActivity()나 startActivityForResult() 메서드를 여러 번 호

junyoung-developer.tistory.com

 

728x90

댓글