viewModelScope lifecycleScope GlobalScope
生命周期
- GlobalScope App結束才會Destoryed。
- lifecycleScope Activity結束才會Destoryed
- viewModelScope 在ViewModel使用,Activity結束才會Destoryed
GlobalScope與lifecycleScope
執行下面的程式,會發即便Activity結束,無限迴圈仍在執行,不會隨著Activity結束而結束。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class MainActivity10 : AppCompatActivity() {
val TAG = "MainActivity10"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val submit = findViewById<Button>(R.id.button)
submit.setOnClickListener {
GlobalScope.launch {
// 無限迴圈
while(true) {
// 每1秒印一次still runing
delay(1000)
Log.d(TAG, "still runing")
}
}
// 5秒後轉到其它Activity,Activity10要結束
GlobalScope.launch {
delay(5000)
Intent(this@MainActivity10, MainActivity01::class.java).also {
startActivity(it)
finish()
}
}
}
}
}
改為lifecycleScope,無限迴圈就會隨著Activity結束,而不會再無限執行。
只會執行五次。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
submit.setOnClickListener {
lifecycleScope.launch {
while(true) {
delay(1000)
Log.d(TAG, "still runing")
}
}
GlobalScope.launch {
delay(5000)
Intent(this@MainActivity10, MainActivity01::class.java).also {
startActivity(it)
finish()
}
}
}
2025-10-14 15:43:55.395 12996-12996 MainActivity10 com.example.coroutine D still runing
2025-10-14 15:43:56.398 12996-12996 MainActivity10 com.example.coroutine D still runing
2025-10-14 15:43:57.401 12996-12996 MainActivity10 com.example.coroutine D still runing
2025-10-14 15:43:58.404 12996-12996 MainActivity10 com.example.coroutine D still runing
2025-10-14 15:43:59.408 12996-12996 MainActivity10 com.example.coroutine D still runing