[Android] TaskStackBuilder ๊ฐ๋จ ์ ๋ฆฌ
Task์ Back Stack
- Task: ์ฌ์ฉ์๊ฐ ํน์ ์์
์ ํ ๋ ์ํธ์์ฉํ๋ Activity ๋ชจ์
๋ชจ๋ Activity๊ฐ ์คํ์์ ์ ๊ฑฐ๋๋ฉด Task๋ ์ฌ๋ผ์ง
๋ฉํฐ ์๋์ฐ ํ๊ฒฝ์์ ์ฑ์ด ๋์์ ์คํ๋ ๋, ์์คํ ์ ๊ฐ ์๋์ฐ์ Task๋ฅผ ๋ณ๋๋ก ๊ด๋ฆฌํ๋ฉฐ, ํ๋์ ์๋์ฐ์๋ ์ฌ๋ฌ Task๊ฐ ์์ ์ ์๋ค.
- Back Stack: Back Stack์ ๊ฐ Activity๊ฐ ์ด๋ฆฐ ์์๋๋ก ์ ๋ ฌ.
ํ์ฌ Activity๊ฐ ๋ค๋ฅธ Activity๋ฅผ ์์ํ๋ฉด, ์ Activity๊ฐ ์คํ์ ๋งจ ์์ push
์ฌ์ฉ์๊ฐ back ๋ฒํผ์ ๋๋ฅด๋ฉด Activity๊ฐ ์ข ๋ฃ๋๊ณ ์คํ์์ pop
์คํ ๋ด Activity๋ ๋ค์ ์ ๋ ฌ๋์ง ์๊ณ push์ pop ๋์๋ง ํจ
-> Back Stack์ LIFO(ํ์
์ ์ถ) ๊ตฌ์กฐ๋ก ๋์
์์ธ ๋ด์ฉ์ Android Developers์์ ๋ณผ ์ ์๋ค.
TaskStackBuilder
TaskStackBuilder๋ Task๊ฐ ์ด๋ ์ Back Stack ์กฐํฉ์ ๊ตฌ์ฑํ๊ธฐ ์ํ ์ ํธ ํด๋์ค
API 11(Android 3.0/Honeycomb)๋ถํฐ back ํค๋ฅผ ์ด์ฉํ ์ด๋ ๋์์ด ๋ณ๊ฒฝ๋์๋ค.
Back ํค๋ก๋ ํ์ฌ Task ๋ด์์๋ง ๋์ํ๊ณ ๋ค๋ฅธ Task๋ก์ ์ด๋์ ๋์ํ์ง ์๋๋ค.
๋ค๋ฅธ Task๋ก์ ์ด๋๊ณผ ์ด์ Task๋ก์ ์ด๋์ โ์ต๊ทผ ์ฑโ UI๋ฅผ ํตํด ๊ฐ๋ฅํ๋ค.
TaskStackBuilder ์ฌ์ฉ ์์ - ์๋ฆผ PendingIntent
Notification์์ Activity๋ฅผ ์์ํ ๋, ์๋ก์ด Back Stack์ ๋ง๋ค๋๋ก TaskStackBuilder๋ฅผ ์ฌ์ฉํ์ฌ PendingIntent๋ฅผ ๋ง๋ค ์ ์๋ค.
1. Manifest์ Activity ๊ณ์ธต ๊ตฌ์กฐ ์ ์
<activity>
์์์ android:parentActivityName
์์ฑ์ ์ถ๊ฐํ์ฌ ๊ณ์ธต ๊ตฌ์กฐ ์ ์
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- MainActivity is the parent for ResultActivity -->
<activity
android:name=".ResultActivity"
android:parentActivityName=".MainActivity" />
...
</activity>
2. Back Stack์ด ์๋ PendingIntent ์์ฑ
TaskStackBuilder์ addNextIntentWithParentStack()
์ ์ด์ฉํ์ฌ ์์ํ๋ ค๋ Activity์ Intent๋ฅผ ์ ๋ฌ
-> Manifest์ ์ ์ํ๋๋ก ์ ์ฒด Back Stack์ด ํฌํจ๋ PendingIntent๋ฅผ ์ป์ ์ ์๋ค.
// Create an Intent for the activity you want to start
val resultIntent = Intent(this, ResultActivity::class.java)
// Create the TaskStackBuilder
val resultPendingIntent: PendingIntent? = TaskStackBuilder.create(this).run {
// Add the intent, which inflates the back stack
addNextIntentWithParentStack(resultIntent)
// Get the PendingIntent containing the entire back stack
getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)
}
ํ์ํ ๊ฒฝ์ฐ, editIntentAt()
์ ํธ์ถํ์ฌ ์คํ ๋ด ํด๋น index์ Intent๋ฅผ ์์ ํ ์ ์๋ค.
-> ์ฌ์ฉ์๊ฐ Back Stack์ Activity๊น์ง ์ด๋ํ๋ ๊ฒฝ์ฐ, Back Stack ๋ด Activity์์ ์๋ฏธ์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด ์ฌ์ฉ
Comments