android - StartActivityForResult() 可能崩溃?

标签 android android-activity garbage-collection android-intent

我有一个简单的问题,我希望其他人能快速回答:如果您启动 Activity [A],然后使用 startActivityForResult() 启动 Activity [B],是否有可能当 [B]完成并返回一个值( Intent ),[A] 可能已经被 GC,因此一切都崩溃了?

我在某处读到这可能会发生,因此您不应该使用 Intent.putExtras() 传回重要信息,因为它可能会丢失?相反,人们建议在 sharedPreferences 中保存状态并在从 [A] 到 [B] 时简单地使用 startActivity() ,然后在从 [B] 返回到 [A] 时再次使用?

因此,我真的很想避免重新编码我正在进行的项目,但如果这可能成为一个问题,我显然希望在发布之前解决它。

但是,如果这可能的话,难道您不能只从 [A] 中放置一些您在 [B] 中使用的静态引用,从而形成硬引用,并且不允许 GC 吗?

感谢大家的帮助!

最佳答案

如果 A 已被销毁,它将被重新创建。来自Activity documentation在 Android 开发指南中:

protected void onActivityResult (int requestCode, int resultCode, Intent data)

[..] You will receive this call immediately before onResume() when your activity is re-starting.

这意味着 Activity A 将正常重新创建(执行 onCreate()、onStart() 和 onActivityResult(),如 Activity lifecycle 中所述)并且您在 Activity B 中设置的结果 Intent 将被传递。

关于android - StartActivityForResult() 可能崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7128883/

相关文章:

android - 记住当jetpack compose中的值发生变化时不要重新组合

android - 从后台获取特定的 Activity

c# - C# 中的内存泄漏

java - System.gc() 与 GC.Collect()

android - 如何为 64 位设备支持我的 flutter 应用程序?

java - 无法终止正在运行的应用程序

android - 如何在android中获取当前可见 fragment ?

c++ - 为什么调用 GC.Collect 会加快速度

java - 在 Android 4 上设置 FrameLayout 背景时出错

android - 从 Android 中的扩展 View 类调用 Activity 方法