ANDROID/Android 앱 프로그래밍
[Android] 태스크(Task) 관리
주 녕
2021. 5. 25. 17:54
반응형
모든 내용은 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() 메서드로 전달받아야 함
launchMode 속성 값을
- singleTop : 태스크의 가장 위쪽에 있는 액티비티는 더 이상 새롭게 만들지 않음
- singleTask : 이 액티비티가 실행되는 시점에서 새로운 태스크를 만들게 됨
- singleInstance : 이 액티비티가 실행되는 시점에서 새로운 태스크를 만들면서 그 이후에 실행되는 액티비티들은 이 태스크를 공유하지 않도록 함
→ 경우에 따라 액티비티를 띄우면서 태스크를 새로 만들도록 설정해야 한다는 점을 기억하자!
* FLAG_ACTIVITY_SINGLE_TOP과 같은 플래그는 아래 포스팅 참고!
반응형