λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[Android] 런치 λͺ¨λ“œ μ’…λ₯˜ 및 각 μž₯단점

좜처

ChatGPT

Gemini


1. `standard` Launch Mode

1. νŠΉμ§•

1. κΈ°λ³Έ λͺ¨λ“œ

`standard`λŠ” μ•ˆλ“œλ‘œμ΄λ“œμ˜ κΈ°λ³Έ 런치 λͺ¨λ“œμ΄λ‹€. μƒˆλ‘œμš΄ μΈν…νŠΈκ°€ μ•‘ν‹°λΉ„ν‹°λ₯Ό μ‹œμž‘ν•  λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λœλ‹€.

2. μ•‘ν‹°λΉ„ν‹° μŠ€νƒ

λ™μΌν•œ μ•‘ν‹°λΉ„ν‹°λ₯Ό μ—¬λŸ¬ 번 ν˜ΈμΆœν•˜λ©΄, μ•‘ν‹°λΉ„ν‹°κ°€ 각기 λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€λ‘œ μŠ€νƒμ— μŒ“μ΄κ²Œ λœλ‹€.

2. μž₯점

1. λ‹¨μˆœν•¨

κ°„λ‹¨ν•˜κ³  직관적이닀. μƒˆλ‘œμš΄ μš”μ²­λ§ˆλ‹€ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜λ―€λ‘œ, ν”„λ‘œκ·Έλž˜λ°μ΄ κ°„λ‹¨ν•˜κ³  μ˜ˆμƒ κ°€λŠ₯ν•œ λ™μž‘μ„ ν•œλ‹€.

2. μƒνƒœ μœ μ§€

각 μΈμŠ€ν„΄μŠ€κ°€ λ…λ¦½μ μ΄λ―€λ‘œ, μ•‘ν‹°λΉ„ν‹° κ°„μ˜ μƒνƒœλ‚˜ 데이터가 μ„žμΌ μ—Όλ €κ°€ μ—†λ‹€.

3. 단점

1. λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ 증가

μ—¬λŸ¬ μΈμŠ€ν„΄μŠ€κ°€ λ™μ‹œμ— μ‘΄μž¬ν•  수 μžˆμ–΄ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 증가할 수 μžˆλ‹€.

2. λ¦¬μ†ŒμŠ€ λ‚­λΉ„

같은 μ•‘ν‹°λΉ„ν‹°λ₯Ό κ³„μ†ν•΄μ„œ 생성할 ν•„μš”κ°€ μ—†λŠ” κ²½μš°μ—λ„ λΆˆν•„μš”ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κ²Œ λœλ‹€.

4. μ‚¬μš© μ˜ˆμ‹œ

1. 데이터가 독립적인 경우

예λ₯Ό λ“€μ–΄, μ‚¬μš©μžκ°€ μ—¬λŸ¬ 개의 λ¬Έμ„œλ₯Ό μ—΄ 수 μžˆλŠ” λ©”λͺ¨ μ•±μ΄λ‚˜, μ—¬λŸ¬ 개의 창을 μ—΄ 수 μžˆλŠ” λΈŒλΌμš°μ € μ•± λ“±μ—μ„œ μœ μš©ν•˜λ‹€.

 

μ˜ˆμ‹œ μ½”λ“œ

<activity android:name=".StandardActivity"
          android:launchMode="standard">
</activity>


2. `singleTop` Launch Mode

1. νŠΉμ§•

1. μ΅œμƒλ‹¨μ—μ„œ μž¬μ‚¬μš©

μ•‘ν‹°λΉ„ν‹°κ°€ μŠ€νƒμ˜ μ΅œμƒλ‹¨μ— μžˆμ„ λ•Œ, λ™μΌν•œ μ•‘ν‹°λΉ„ν‹°κ°€ λ‹€μ‹œ μ‹œμž‘λ˜λ©΄ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  κΈ°μ‘΄ μΈμŠ€ν„΄μŠ€λ₯Ό μž¬μ‚¬μš©ν•œλ‹€.

2. onNewIntent() 호좜

μ΅œμƒλ‹¨μ— μžˆμ„ 경우 μƒˆλ‘œμš΄ μΈν…νŠΈλ‘œ `onNewIntent()`κ°€ ν˜ΈμΆœλ˜μ–΄ μ—…λ°μ΄νŠΈλœλ‹€.

2. μž₯점

1. λ©”λͺ¨λ¦¬ νš¨μœ¨μ„±

μŠ€νƒ μ΅œμƒλ‹¨μ— μžˆλŠ” κ²½μš°μ—λŠ” μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•  수 μžˆλ‹€.

2. 효율적인 λ¦¬μ†ŒμŠ€ μ‚¬μš©

μ•‘ν‹°λΉ„ν‹°κ°€ μ΅œμƒλ‹¨μ— μžˆμ„ λ•Œλ§Œ μž¬μ‚¬μš©λ˜λ―€λ‘œ, νŠΉμ • μ‘°κ±΄μ—μ„œλ§Œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ΅œμ ν™”ν•  수 μžˆλ‹€.

3. 단점

1. μ‚¬μš©μž ν˜Όλž€

μŠ€νƒμ— μžˆλŠ” λ‹€λ₯Έ μ•‘ν‹°λΉ„ν‹°μ™€μ˜ ꡬ별이 ν•„μš”ν•˜μ—¬ κ°œλ°œμžκ°€ μ œλŒ€λ‘œ κ΄€λ¦¬ν•˜μ§€ μ•ŠμœΌλ©΄ μ‚¬μš©μž κ²½ν—˜μ΄ ν˜Όλž€μŠ€λŸ¬μšΈ 수 μžˆλ‹€.

4. μ‚¬μš© μ˜ˆμ‹œ

1. μ•Œλ¦Ό 클릭

μ‚¬μš©μžκ°€ μ•Œλ¦Όμ„ ν΄λ¦­ν•˜μ—¬ μ•‘ν‹°λΉ„ν‹°λ₯Ό μ‹œμž‘ν•  λ•Œ, 이미 ν•΄λ‹Ή μ•‘ν‹°λΉ„ν‹°κ°€ μ΅œμƒλ‹¨μ— 있으면 같은 μΈμŠ€ν„΄μŠ€λ₯Ό μž¬μ‚¬μš©ν•˜λŠ” κ²½μš°μ— μœ μš©ν•©λ‹ˆλ‹€.

 

μ˜ˆμ‹œ μ½”λ“œ

<activity android:name=".SingleTopActivity"
          android:launchMode="singleTop">
</activity>

 

class SingleTopActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_single_top)
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        // μƒˆ μΈν…νŠΈλ‘œ 데이터 μ—…λ°μ΄νŠΈ
    }
}


3. `singleTask` Launch Mode

1. νŠΉμ§•

1. 단일 μΈμŠ€ν„΄μŠ€

νƒœμŠ€ν¬ λ‚΄μ—μ„œ 단 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μœ μ§€λœλ‹€. λ™μΌν•œ μ•‘ν‹°λΉ„ν‹°κ°€ λ‹€μ‹œ μ‹œμž‘λ˜λ©΄, κΈ°μ‘΄ μΈμŠ€ν„΄μŠ€κ°€ μ΅œμƒλ‹¨μœΌλ‘œ μ΄λ™ν•œλ‹€.

2. ν•˜μœ„ μ•‘ν‹°λΉ„ν‹° 제거

κΈ°μ‘΄ μΈμŠ€ν„΄μŠ€κ°€ μ΅œμƒλ‹¨μœΌλ‘œ 올라였며 ν•΄λ‹Ή μ•‘ν‹°λΉ„ν‹° μœ„μ˜ λͺ¨λ“  μ•‘ν‹°λΉ„ν‹°λŠ” μ œκ±°λœλ‹€.

3. μƒˆλ‘œμš΄ νƒœμŠ€ν¬ 생성

λ‹€λ₯Έ νƒœμŠ€ν¬μ—μ„œ 이 μ•‘ν‹°λΉ„ν‹°λ₯Ό μ‹œμž‘ν•˜λ©΄ μƒˆλ‘œμš΄ νƒœμŠ€ν¬κ°€ μƒμ„±λœλ‹€.

2. μž₯점

1. 쀑볡 방지

단일 μΈμŠ€ν„΄μŠ€λ§Œ ν—ˆμš©λ˜μ–΄ νŠΉμ • μ•‘ν‹°λΉ„ν‹°κ°€ μ€‘λ³΅λ˜μ§€ μ•Šκ²Œ 보μž₯ν•œλ‹€. μ•±μ˜ ꡬ쑰λ₯Ό λ‹¨μˆœν™”ν•  수 μžˆλ‹€.

2. νƒœμŠ€ν¬ 관리

λΆˆν•„μš”ν•œ μ•‘ν‹°λΉ„ν‹°λ₯Ό μ œκ±°ν•¨μœΌλ‘œμ¨ νƒœμŠ€ν¬μ˜ 관리λ₯Ό μš©μ΄ν•˜κ²Œ ν•œλ‹€.

3. 단점

1. νƒœμŠ€ν¬ μ˜€λ²„ν—€λ“œ

μƒˆλ‘œμš΄ νƒœμŠ€ν¬λ₯Ό μƒμ„±ν•˜μ—¬ κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— 좔가적인 μ‹œμŠ€ν…œ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•  수 μžˆλ‹€.

2. μ‚¬μš©μž κ²½ν—˜ ν˜Όλž€

λ‹€λ₯Έ νƒœμŠ€ν¬λ‘œ μ „ν™˜ν•˜λ©΄μ„œ μ‚¬μš©μž κ²½ν—˜μ΄ 예기치 μ•Šκ²Œ λ°”λ€” 수 μžˆλ‹€.

4. μ‚¬μš© μ˜ˆμ‹œ

1. ν™ˆ ν™”λ©΄, μ£Όμš” κΈ°λŠ₯

ν™ˆ ν™”λ©΄μ΄λ‚˜ λΈŒλΌμš°μ €μ™€ 같이 μ–Έμ œλ‚˜ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μžˆμ–΄μ•Ό ν•˜λŠ” κ²½μš°μ— μ ν•©ν•˜λ‹€.

μ˜ˆμ‹œ μ½”λ“œ

<activity android:name=".SingleTaskActivity"
          android:launchMode="singleTask">
</activity>

 

class SingleTaskActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_single_task)
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        // μƒˆ μΈν…νŠΈλ‘œ 데이터 μ—…λ°μ΄νŠΈ
    }
}


4. `singleInstance` Launch Mode

1. νŠΉμ§•

1. 단일 νƒœμŠ€ν¬

μ•‘ν‹°λΉ„ν‹°κ°€ 항상 κ³ μœ ν•œ νƒœμŠ€ν¬μ—μ„œ μ‹€ν–‰λœλ‹€. λ‹€λ₯Έ 앑티비티와 ν•¨κ»˜ μŒ“μ΄μ§€ μ•Šκ³  λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λœλ‹€.

2. μœ μΌν•œ μ•‘ν‹°λΉ„ν‹°

μ‹œμŠ€ν…œμ—μ„œ ν•΄λ‹Ή μ•‘ν‹°λΉ„ν‹°κ°€ μœ μΌν•œ μΈμŠ€ν„΄μŠ€λ‘œ λ‚¨μœΌλ©°, λ‹€λ₯Έ νƒœμŠ€ν¬μ™€μ˜ μƒν˜Έμž‘μš©μ„ μ΅œμ†Œν™”ν•œλ‹€.

2. μž₯점

1. 독립성

νŠΉμ • μ•‘ν‹°λΉ„ν‹°κ°€ λ‹€λ₯Έ νƒœμŠ€ν¬μ™€ μƒν˜Έμž‘μš©ν•˜μ§€ μ•Šκ³  λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•  λ•Œ μœ μš©ν•˜λ‹€.

2. κ³ μœ ν•œ μ»¨ν…μŠ€νŠΈ

μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€λ₯Ό μ ˆμ•½ν•˜κ³  μ•‘ν‹°λΉ„ν‹°μ˜ κ³ μœ ν•œ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 데 μ ν•©ν•˜λ‹€.

3. 단점

1. μ œν•œλœ μƒν˜Έμž‘μš©

독립적이기 λ•Œλ¬Έμ— λ‹€λ₯Έ μ•‘ν‹°λΉ„ν‹°μ™€μ˜ μƒν˜Έμž‘μš©μ΄ μ œν•œλ˜λ©°, λ‚΄λΉ„κ²Œμ΄μ…˜ 흐름이 λ³΅μž‘ν•΄μ§ˆ 수 μžˆλ‹€.

2. λ¦¬μ†ŒμŠ€ λΉ„μš©

μœ μΌν•œ νƒœμŠ€ν¬λ‘œ 인해 λ¦¬μ†ŒμŠ€κ°€ 낭비될 수 μžˆλ‹€.

4. μ‚¬μš© μ˜ˆμ‹œ

1. μ•ŒλžŒ, μ „ν™”

μ•ŒλžŒμ΄λ‚˜ μ „ν™” μ•±κ³Ό 같은 κΈ°λŠ₯μ—μ„œ μ ν•©ν•˜λ©°, μ‚¬μš©μž κ²½ν—˜μ„ λ°©ν•΄ν•˜μ§€ μ•Šκ³  λ…λ¦½μ μœΌλ‘œ μž‘λ™ν•΄μ•Ό ν•˜λŠ” μ‹œλ‚˜λ¦¬μ˜€μ— μœ μš©ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ μ½”λ“œ

<activity android:name=".SingleInstanceActivity"
          android:launchMode="singleInstance">
</activity>

 

class SingleInstanceActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_single_instance)
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        // μƒˆ μΈν…νŠΈλ‘œ 데이터 μ—…λ°μ΄νŠΈ
    }
}

 

 

런치 λͺ¨λ“œμ˜ 비ꡐ μš”μ•½

런치 λͺ¨λ“œ μ„€λͺ… μž₯점 단점 μ‚¬μš© 사둀
standard κΈ°λ³Έ 런치 λͺ¨λ“œ,
μƒˆλ‘œμš΄ μΈν…νŠΈλ§ˆλ‹€ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€ 생성  
λ‹¨μˆœν•˜κ³  λ…립적이며 μƒνƒœ μœ μ§€κ°€ μš©μ΄ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ μ¦κ°€, 
쀑볡 μƒμ„±  
독립적인 λ°μ΄ν„° μ²˜λ¦¬
singleTop μ΅œμƒλ‹¨μ— μžˆμœΌλ©΄ μΈμŠ€ν„΄μŠ€ μž¬μ‚¬μš©, 
μƒˆλ‘œμš΄ μΈν…νŠΈλŠ” `onNewIntent()`
λ©”λͺ¨λ¦¬ νš¨μœ¨μ„±, 
ν•„μš”ν•  λ•Œλ§Œ μΈμŠ€ν„΄μŠ€ μƒμ„±
μ‚¬μš©μž κ²½ν—˜μ΄ ν˜Όλž€μŠ€λŸ¬μšΈ μˆ˜ μžˆμŒ μ•Œλ¦Ό ν΄λ¦­, 
λ©”μ‹œμ§€ ν‘œμ‹œ
singleTask μŠ€νƒμ— μΈμŠ€ν„΄μŠ€κ°€ μ‘΄μž¬ν•˜λ©΄ μ΅œμƒλ‹¨μœΌλ‘œ μ΄λ™, 
ν•˜μœ„ μ•‘ν‹°λΉ„ν‹° μ œκ±°
쀑볡 λ°©μ§€, 
νƒœμŠ€ν¬ κ΄€λ¦¬ μš©μ΄
μƒˆλ‘œμš΄ νƒœμŠ€ν¬ μƒμ„±μœΌλ‘œ μ˜€λ²„ν—€λ“œ λ°œμƒ κ°€λŠ₯ ν™ˆ ν™”λ©΄, 
λΈŒλΌμš°μ €
singleInstance 독립적인 νƒœμŠ€ν¬λ‘œ μ‹€ν–‰, 
κ³ μœ ν•œ μΈμŠ€ν„΄μŠ€λ§Œ μœ μ§€
독립적 μ‹€ν–‰, 
고유 μƒνƒœ μœ μ§€
μƒν˜Έμž‘μš© μ œν•œ, 
λ¦¬μ†ŒμŠ€ λ‚­λΉ„ κ°€λŠ₯
 μ•ŒλžŒ, μ „ν™” λ“± λ…λ¦½μ μœΌλ‘œ μž‘동해야 ν•˜λŠ” κΈ°λŠ₯


선택 κΈ°μ€€

각 런치 λͺ¨λ“œλŠ” νŠΉμ • μ‹œλ‚˜λ¦¬μ˜€μ— μ ν•©ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆλ‹€. 선택할 λ•ŒλŠ” λ‹€μŒκ³Ό 같은 μš”μ†Œλ₯Ό κ³ λ €ν•΄μ•Ό ν•œλ‹€:

1. μ‚¬μš©μž κ²½ν—˜

μ‚¬μš©μžκ°€ μ•‘ν‹°λΉ„ν‹°λ₯Ό μ–΄λ–»κ²Œ νƒμƒ‰ν•˜κ³  μƒν˜Έμž‘μš©ν• μ§€μ— 따라 런치 λͺ¨λ“œλ₯Ό 선택해야 ν•œλ‹€. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μžκ°€ 이전 μƒνƒœλ‘œ λŒμ•„κ°€μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” `standard`λ‚˜ `singleTop`이 적합할 수 μžˆλ‹€.

2. λ¦¬μ†ŒμŠ€ 관리

λ©”λͺ¨λ¦¬μ™€ μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€λ₯Ό μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ νŠΉμ • μƒν™©μ—μ„œλŠ” `singleTask`λ‚˜ `singleInstance`λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ©μ 

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ£Όμš” κΈ°λŠ₯에 따라 κ°€μž₯ μ ν•©ν•œ 런치 λͺ¨λ“œλ₯Ό 선택해야 ν•œλ‹€. μ£Όμš” ν™”λ©΄μ΄λ‚˜ κ³ μœ ν•œ κΈ°λŠ₯μ—λŠ” `singleTask`λ‚˜ `singleInstance`κ°€ μœ μš©ν•  수 μžˆλ‹€.

 

  • μ•±μ˜ 메인 μ•‘ν‹°λΉ„ν‹° : singleTask
  • λ™μΌν•œ μ•‘ν‹°λΉ„ν‹°κ°€ 반볡적으둜 ν˜ΈμΆœλ˜λŠ” 경우 : singleTop
  • μ™„μ „νžˆ λ…λ¦½λœ ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” μ•‘ν‹°λΉ„ν‹° : singleInstance

μ΄λŸ¬ν•œ μš”μ†Œλ₯Ό κ³ λ €ν•˜μ—¬ 각 런치 λͺ¨λ“œμ˜ μž₯단점을 잘 μ΄ν•΄ν•˜κ³ , μ•±μ˜ 섀계와 μ‚¬μš©μž μš”κ΅¬μ— λ§žλŠ” μ μ ˆν•œ 런치 λͺ¨λ“œλ₯Ό μ„ νƒν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.