【发布时间】:2021-11-04 13:06:37
【问题描述】:
我从模板创建了一个应用程序,并填充了一些日志,如下所示
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MainApplication.something++
Log.d("Tracking", "onCreate ${MainApplication.something} ${Thread.currentThread()}")
setContentView(R.layout.activity_main)
}
override fun onStart() {
super.onStart()
Log.d("Tracking", "onStart")
}
override fun onResume() {
super.onResume()
Log.d("Tracking", "onResume")
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
Log.d("Tracking", "onConfigurationChanged")
}
override fun onPause() {
super.onPause()
Log.d("Tracking", "onPause")
}
override fun onStop() {
super.onStop()
Log.d("Tracking", "onStop")
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
Log.d("Tracking", "onSaveInstanceState")
}
override fun onDestroy() {
super.onDestroy()
Log.d("Tracking", "onDestroy")
}
}
和
class MainApplication: Application() {
companion object {
var something = 0
}
override fun onCreate() {
super.onCreate()
Log.d("Tracking", "Application onCreate $something ${Thread.currentThread()}")
}
}
当我运行它时,我注意到有时它会启动 3 次。 (有时会启动 2 次,有时会启动 1 次)。
日志如下
2021-11-04 23:55:31.409 7810-7810/com.example.empty D/Tracking: Application onCreate 0 Thread[main,5,main]
2021-11-04 23:55:31.445 7810-7810/com.example.empty D/Tracking: onCreate 1 Thread[main,5,main]
2021-11-04 23:55:31.409 7810-7810/com.example.empty D/Tracking: Application onCreate 0 Thread[main,5,main]
2021-11-04 23:55:31.445 7810-7810/com.example.empty D/Tracking: onCreate 1 Thread[main,5,main]
2021-11-04 23:55:31.508 7810-7810/com.example.empty D/Tracking: onStart
2021-11-04 23:55:31.445 7810-7810/com.example.empty D/Tracking: onCreate 1 Thread[main,5,main]
2021-11-04 23:55:31.509 7810-7810/com.example.empty D/Tracking: onResume
2021-11-04 23:55:31.508 7810-7810/com.example.empty D/Tracking: onStart
2021-11-04 23:55:31.509 7810-7810/com.example.empty D/Tracking: onResume
2021-11-04 23:55:31.509 7810-7810/com.example.empty D/Tracking: onResume
最初,我以为是 Activity 启动了 3 次,但是当我注销 Application onCreate 时,它也启动了 3 次。我明确放置了一个静态变量something,并清楚地看到应用程序是 3 个不同的实例(因为该变量在 3 次中没有递增)。
为了确认不是因为配置更改或活动被杀死(根据https://stackoverflow.com/a/3588750/3286489 中的解释),我还会在 onPause、onStop、onSavedInstanceState 和 onDestroy 都没有被调用时注销。
有谁知道为什么应用程序只启动一次就启动了3次?
注意:我在 Android SDK 31 和 30 以及 Emulator API S 和 API 29 上编译,它们都具有相同的行为。还在实际设备 Android 8.0 上进行了尝试。显示相同的行为。
更新我注意到它只发生在第二次编译之后。也许它只是一个重复清除的日志(虽然我已经清除了)。
【问题讨论】:
-
您是否仅在 sdk 31 和 30 上获得此行为?另外,您是否尝试在设备上运行该应用程序?行为是否相同?
-
在 Android 8.0 设备上也试过。这也会发生。
标签: android