【问题标题】:Prevent activity from being destroyed防止活动被破坏
【发布时间】:2012-05-02 17:31:47
【问题描述】:

我正在通过我这样调用的活动向相机发送意图:

 Intent testphoto = new Intent(Dashboard.this,CameraHandler.class);
 startActivity(testphoto);

在CameraHandler 类中我调用相机:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 0);

但在onActivityResult 被CameraHandler 类调用之前,活动被销毁。有没有办法防止这种情况发生?

找到答案: 我的AndroidManifest 中有noHistory="true",这使得操作系统在结果之前破坏了活动。

【问题讨论】:

  • 你怎么知道它被破坏了?
  • 我在 OnDestroy() 方法中添加了一个日志,我尝试了一个只有一个活动的应用程序,它工作正常,但是当我开始在更复杂的应用程序中使用它时,活动被破坏在相机返回图像之前
  • 如果您找到了自己的答案,请将其发布并接受您自己的答案以结束问题。谢谢。

标签: android android-activity android-camera-intent android-ondestroy


【解决方案1】:

确保您没有开启“不保留活动”开发者设置,因为它会破坏您要离开的活动。

【讨论】:

  • QA 报告了一个问题 - 我只能在他们使用的手机上重现它。我无法弄清楚为什么活动 ket 退出!直到我看到你的评论才知道这个设置。谢谢:)
  • 这只是在我的平板电脑上.. 问题...谢谢 bud +1
  • +100。为什么这甚至是一种选择?它有很多副作用!
  • 非常感谢。我一直在努力找出为什么它在我的手机上开始被破坏,而在模拟器中却没有。
  • 有些问题实在是太令人难以忘怀了......应该有一部关于开发者代码嫉妒的电影......
【解决方案2】:

当您调用startActivityForResult() 时,您不必担心调用Activity 会被破坏,因为它根本不会改变预期的行为(即子活动将记住将结果传递回parent 无论父级是否被销毁)。看到这个post。

还请注意,虽然有时需要防止 Activitys 被破坏(即配置更改等),但通常您希望单独保留 Activity 生命周期并让系统管理后台 @987654327 @s 给你。一旦你启动了一个新的Activity,你不应该明确地阻止以前的Activitys 被销毁。

【讨论】:

  • 唯一的事情是突然 onActivityResult 永远不会被调用,当我有一个只有一个活动的应用程序时,活动永远不会被破坏,但是 onActivityResult 被调用,现在当在另一个应用程序中突然活动被破坏并且结果似乎永远不会回来。知道这是怎么回事吗?
  • 您的工作流程可能有问题。你打电话给startActivityForResult() 两次似乎很奇怪。在启动实际的相机应用程序时,您肯定需要调用startActivityForResult(),但我不太确定您是否需要CameraHandler 类。 CameraHandler 类到底是什么?是否可以直接从仪表板启动相机应用程序?
  • 我需要一个中间的屏幕,所以直接从仪表板不是一个选项,我发现 startActivityForResult 会阻止破坏活动,但它不会,所以实际上我也可以删除它。 Camerahandler 将意图发送到相机并上传照片 onactivity 结果,它现在不这样做..
  • 好的,为了清楚起见...您已从仪表板中删除了startActivityForResult() 调用? (你可能想更新你原来的帖子)。
  • 你看过这个吗?根据您提供给我的信息,我无法确定您的代码有什么问题,但我可以告诉您,如果在 Activity 返回时从未调用过 onActivityResult,则肯定有问题。查看示例代码here 看看是否有帮助。
【解决方案3】:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
相关资源
最近更新 更多