Android onCreate onResume

15
我有一个问题。当我第一次启动我的Android应用程序时,在主活动中会同时调用onCreateonResume。但是我想只调用onCreate。我该怎么做?

2
如果你不需要,可以移除onResume(),它不会有影响。 - Kakey
请检查这个答案,它可能会有用:https://dev59.com/IWoy5IYBdhLWcg3wfeIR#8516056 - Yaqub Ahmad
4个回答

42
根据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)”的错误。有什么想法吗? - proudgeekdad
6
你应该使用Activity的onRestart()方法,它专门用于这种情况。 - Fenix Voltres
1
如果您的活动被停止(onStopped()),那么@FenixVoltres是正确的,您应该使用onRestart() - Joshua Pinter

15

正确的答案是使用ActivityonRestart()方法。这很可能就是你一直在寻找的。


不一定。只有当活动停止时才会调用onRestart() - anon
дҪ иҜҙеҫ—жІЎй”ҷпјҢдҪҶжҳҜдёҠйқўй—®йўҳзҡ„зӯ”жЎҲжҳҜе°Ҷд»Јз Ғд»ҺonResume()пјҲеңЁжҙ»еҠЁеҲӣе»әж—¶д№ҹдјҡи°ғз”Ёпјү移еҠЁеҲ°onRestart()пјҢиҝҷдёҚжҳҜйҮҚзӮ№жүҖеңЁгҖӮ - Fenix Voltres
1
@bowmanb 正确,但在大多数情况下,如果不知道他的意图,onRestart() 是你想要的。 - Joshua Pinter

1

1
好的,谢谢。所以如果onResume被调用,那么在第一次访问时无法使活动以某种方式运行,在另一次调用时以另一种方式运行,我是对的吗? - Alessio
@Alessio 是的,请查看 onRestart() 方法。请参考 @Fenix 的回答。 - Joshua Pinter

1

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

我猜你可以为第一次访问设置一个全局布尔值,并将其设置为false。 然后重写onResume并检查变量。 如果为false,则将其设置为true并返回, 如果为true,则调用super.onResume。

应该可以工作,但我不知道是否可以更简单地处理它,而且我没有在这里访问sdk来测试它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接