[英]Android onCreate is called twice after backing out
I have a simple MainActivity and if the app is completely killed it looks like onCreate() is called once.我有一个简单的 MainActivity,如果应用程序被完全杀死,它看起来像 onCreate() 被调用一次。 If however I back out of the app so it still appears in the background, when I re-open it I get every log message twice.但是,如果我退出应用程序使其仍然出现在后台,当我重新打开它时,我会收到每条日志消息两次。 The weirdest part is if I generate a random number it is always the same in the 2 log messages.最奇怪的部分是,如果我生成一个随机数,它在 2 个日志消息中总是相同的。
I've tried adding android:LaunchMode="singleTop" (also singleInstance singleTask) in the activity and application tags of the Manifest.我尝试在清单的活动和应用程序标签中添加 android:LaunchMode="singleTop"(也是 singleInstance singleTask)。
class MainActivity : AppCompatActivity() {
private val binding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val view = binding.root
setContentView(view)
setupViews()
val data: Uri? = intent?.data
DataHolder.getInstance().setItem(data)
Timber.plant(Timber.DebugTree())
setupInjection()
Timber.d("review nanoTime = ${System.nanoTime()}")
Timber.d("review savedInstance = $savedInstanceState")
Timber.d("review random = ${Random.nextInt()}")
}
override fun onPause() {
Timber.d("review onPause()")
super.onPause()
}
override fun onStop() {
Timber.d("review onStop()")
super.onStop()
}
override fun onDestroy() {
Timber.d("review onDestroy()")
super.onDestroy()
finish()
}
override fun onStart() {
Timber.d("review onStart()")
super.onStart()
}
override fun onRestart() {
Timber.d("review onRestart()")
super.onRestart()
}
override fun onResume() {
Timber.d("review onResume()")
super.onResume()
}
private fun setupInjection() {
val appInjector = InjectorImpl(
firebaseAuth = FirebaseAuth.getInstance()
)
Injector.initialize(appInjector)
}
private fun setupViews() = binding.apply {
val navController = findNavController(R.id.nav_host_fragment)
navView.setupWithNavController(navController)
navView.setOnItemSelectedListener { item ->
when (item.itemId){
R.id.navigation_item_calculator -> {
navController.navigate(BuilderFragmentDirections.actionBuilderToCalculator())
}
R.id.navigation_item_builder -> {
navController.navigate(CalculatorFragmentDirections.actionCalculatorToBuilder())
}
}
true
}
navView.setOnItemReselectedListener { }
}
}
Here is a table of the log trace I get when I run the app on my phone from Android studio.这是我从 Android Studio 在手机上运行应用程序时得到的日志跟踪表。 Since the random numbers are the same I feel like this is actually a Logging bug in Android studio and the app isn't actually opened twice.由于随机数相同,我觉得这实际上是 Android Studio 中的日志记录错误,并且该应用程序实际上并未打开两次。
Realized my problem was with my logging library I used.意识到我的问题出在我使用的日志库上。
Timber was planting a new tree but wasn't uprooting old ones from being backed out so there were 2 instances of them. Timber 正在种植一棵新树,但并没有将旧树连根拔起,因此有 2 个实例。 I fixed by putting a Timber.uprootAll()
just before Timber.plant(Timber.DebugTree())
我固定放一个Timber.uprootAll()
之前Timber.plant(Timber.DebugTree())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.