val testFlow = MutableStateFlow(0)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
findViewById<ComposeView>(R.id.compose).apply {
setContent {
Text(text = "MainActivity", modifier = Modifier.clickable {
startActivity(Intent(this@MainActivity, SecondActivity::class.java))
})
}
}
CoroutineScope(Dispatchers.IO).launch {
repeat(100000000) {
testFlow.value = it
delay(1000)
}
}
}
}
class SecondActivity: ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Text(text = "SecondActivity")
}
CoroutineScope(Dispatchers.IO).launch {
testFlow.collect {
Log.d("qwer", "collect ${it}")
}
}
}
}
在MainActivity中每隔1秒更改一次testFlow的值,在SecondActivity中获取testFlow的值,实验结果发现当SecondActivity销毁时依然会收到数据并打印出来,并且如果再次打开SecondActivity会重复打印数据
class SecondActivity: ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Text(text = "SecondActivity")
}
CoroutineScope(Dispatchers.IO).launch {
testFlow.collect {
val root = findViewById<View>(android.R.id.content)
Log.d("qwer", "collect ${it}")
Log.d("qwer", "root = ${root}")
}
}
}
}
更进一步,假如协程作用域中持有了Activity的对象,那么jvm就无法对其进行回收,引发内存泄漏