【问题标题】:OnCreate is called multiply when app is started from Play Store App first and then from home screen当应用程序首先从 Play 商店应用程序启动然后从主屏幕启动时,OnCreate 会被多次调用
【发布时间】:2020-06-02 16:42:54
【问题描述】:

我突然想到,在某些情况下,我们的应用程序似乎在后台运行后从头开始重新启动。我设法追踪到MainActivity.OnCreate在以下情况下被称为乘法

  • 从 APK 安装应用程序,然后从安装程序运行,在后台应用程序并从主屏幕启动后,它会重置为从头开始
    • 此行为一直存在,直到应用程序被终止,然后从主屏幕重新启动
  • 应用程序从 Google Play 应用程序运行,在应用程序后台运行并从主屏幕启动后,它会重置为从头开始
    • 如果应用在后台运行,然后从 Play 商店启动,则它会正确启动
  • 应用程序从主屏幕运行,在应用程序后台运行并从 Google Play 启动后,它会重置为从头开始

当应用程序从最初启动的同一个启动器置于前台时,OnCreate 不会再次被调用。至少有one question reporting a similar behavior,不幸的是,没有为该行为提供解决方案的答案。

当调用MainActivity.OnCreate 时,MainActivity 的实例似乎与初始实例不同,因为在我尝试记录它们时,OnCreate 中设置的私有成员是null,无论如何,应用程序上下文似乎没有从头开始重新创建,因为AppCenter 似乎在第二次运行时立即被初始化,Xamarin.Forms 启动速度更快,静态变量保持其值。

有什么方法可以防止这种行为,只保持MainActivity 的单个实例处于活动状态?

【问题讨论】:

标签: android xamarin.android


【解决方案1】:

恭喜!您已经被一个长期存在的、令人讨厌的 Android 错误所困扰,该错误从一开始就存在并且仍然被破坏,尽管已经打开了无数关于它的问题并且该行为是可重现且有据可查的。

请参阅以下内容:

2019 年 9 月,其中一个问题被标记为“已修复”,并附有以下评论:

感谢您报告此问题。该问题已解决,它将 在未来的 Android 版本中可用。

所以希望我们不会再在 Android Z 中看到这种情况 ;-)

我的回答中记录了一种解决方法 Re-launch of Activity on Home button, but...only the first time

【讨论】:

  • 花了一些时间来整理所有东西(错过了导致副作用的return),但我认为我现在正确地使用了解决方法。非常感谢:)
【解决方案2】:

在你的 android 清单中设置在活动标签上

android:launchMode="singleTop"

这将对您如何处理通知产生影响,在某些情况下还会影响到 ActivityResult

【讨论】:

  • 谢谢莉娜,我马上就要离开办公室了,不过明天早上我会试一试。
  • 这修复了原始问题,但现在通过主屏幕快捷方式启动应用程序后会出现问题。你知道是否有解决办法吗?
猜你喜欢
  • 2020-02-04
  • 2013-11-19
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
相关资源
最近更新 更多