【问题标题】:Activity Create and resume again and again in Nougat VersionActivity 在 Nougat 版本中一次又一次地创建和恢复
【发布时间】:2018-09-23 09:59:30
【问题描述】:

我从Activity A 导航到Activity B 没有完成Activity A(因为我想回到它并有一些变量值)。

Activity B 中,我启动相机并保存捕获的图像,但问题是,在捕获相机后,Activity A 被重新创建并恢复,导致我的变量重新初始化。

如何阻止它?

注意:该问题仅出现在牛轧糖版本中。

【问题讨论】:

  • 怎么可能!!!只有牛轧糖版本????
  • 您能否发布一些关于您如何准确调用活动 B 以及如何从 B 导航回 A 的代码?你还说这只发生在牛轧糖上,你在其他版本上测试过,代码工作正常吗?
  • 是的,我在所有旧版本上进行了测试,效果很好。通过调用 finish() 方法进入活动 A 的唯一方法。有机构知道吗?在牛轧糖版本中,他们停止其他活动以获得更好的性能?
  • 请贴代码
  • 您是否在拍摄图像时改变手机的方向?

标签: java android android-studio android-activity


【解决方案1】:

您想在这里了解的是关于整个活动生命周期的信息。基本上总结他们是 OnCreate, - 在创建活动时调用 OnStart, - 在活动开始时调用 OnREsume, - 当活动恢复时 OnPause, - 当活动重叠时 OnStop, - 活动结束时 和 onDestroy - 当 finish() 被调用时。

虽然你没有提到你是如何开始一个活动并返回到同一个活动的,但返回到上一个活动的正确方法是调用

finish()

关于相机活动。 我猜你已经通过使用回到活动 A

Intent i= new Intent(this, ActvityA.class)
startActivity(i)

这是正确的做法。 当你想从 B 回到活动 A 时,只需调用 finish()(这里 B 在 A 的顶部)。

附加 如果您想将数据从活动 B 传递到 A,只需输入名为 Intent Extra or Bundle 的内容即可

【讨论】:

  • 我没有从 Activity B 调用 Activity A。我只是在捕获图像后调用,finish()
  • 如果你在 capture 之后调用了 finish ,一旦你捕获了图像,堆栈中的 Activity 就是 A。这就是你在 Activity A 的 onResume 上被重定向的原因,我相信所有版本的 android 都会发生同样的情况。请分享代码
【解决方案2】:

活动 A 再次创建并恢复,因此我的变量再次初始化。如何阻止它。

是的,这很正常。 Android 编程的第一条规则是您的活动可以随时终止。因此,为了不丢失变量,您必须在正确的时刻保存它们。

您可以这样做来覆盖 onSaveInstanceState() 将您的变量放入包中。

然后你可以从函数参数中检索到onCreate()

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多