【问题标题】:Android onCreate onResumeAndroid onCreate onResume
【发布时间】:2011-05-30 11:27:09
【问题描述】:

我有问题。 当我第一次启动我的 android 应用程序时,在主要活动中,onCreateonResume 都被调用了。但我只想被称为 onCreate。

我能做什么?

【问题讨论】:

标签: android oncreate onresume


【解决方案1】:

根据 SDK 文档,您看到的是预期行为。查看 Activity 文档中的流程图 - Activity Lifecycle

您可以通过编程方式来克服这个问题,方法是保留一个实例成员来跟踪之前是否调用过 onResume - 第一次调用它时,设置变量并返回例如

private boolean resumeHasRun = false;

@Override
protected void onResume() {
    super.onResume();
    if (!resumeHasRun) {
        resumeHasRun = true;
        return;
    }
    // Normal case behavior follows
}

【讨论】:

  • 当我尝试执行此操作时,当我尝试设置 resumeHasRun = true 时收到“暂停(异常 RuntimeException)”。有什么想法吗?
  • 你应该使用 Activity 的 onRestart() 方法而不是这个方法,它正是针对该用例而设计的。
  • 如果你的活动停止了(onStopped()),那么@FenixVoltres 是正确的,你应该使用onRestart()
【解决方案2】:

正确答案是使用ActivityonRestart()方法。这可能就是您一直在寻找的。​​p>

【讨论】:

  • 不一定。 onRestart() 仅在活动停止时调用。
  • 你是对的,但上述问题的答案是将代码从onResume()(在创建活动时也会调用)移动到onRestart(),这不是,重点是什么.
  • @bowmanb 正确,但在不知道他的意图的情况下,在大多数情况下,onRestart() 是您想要的。
【解决方案3】:

你不能做任何事情,因为这就是 Activity 生命周期的工作方式。

有关显示生命周期的图表,请参阅 http://developer.android.com/guide/topics/fundamentals/activities.html#Lifecycle

【讨论】:

  • 好的,谢谢.. 所以如果 onResume 在任何时候被调用,就没有办法让活动在第一次访问时以某种方式表现,在被回调时以另一种方式表现......我我对吗?
  • @Alessio 是的,看看onRestart() 方法。请参阅@Fenix 的回答。
【解决方案4】:

正如您在 API 中看到的那样,活动生命周期总是在显示活动之前调用 onResume。 http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

我想您可以为首次访问创建一个全局布尔值并将其设置为 false。 然后覆盖 onResume 并检查变量。 如果为假,则将其设置为真并返回, 如果为真,则调用 super.onResume。

应该可以,但是不知道能不能处理的更简单,我这里也没有sdk来测试一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多