0

我有一个应该只创建一次的活动。也就是onCreate只能调用一次。如果再次调用它,我希望 Activity 什么也不做。

是否建议执行以下操作?

protected void onCreate(Bundle savedInstanceState) {
    this.setTheme(android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
    super.onCreate(savedInstanceState);

    if(onCreateWasCalledAlreadyBoolean) {
        setResult(RESULT_OK);
        finish();
        return;
    }

    //Do other stuff here
}
4

2 回答 2

1

我假设您了解活动生命周期的工作原理。我的意思是,您并没有试图避免在这里不适用的东西(认为它onCreate可能会被多次调用,只要它只是onRestarts 等等)。

从技术上讲,它完全没问题。

但是,如果根本不应该创建活动,那么您应该更多地担心为什么需要再次调用活动(“ A ”),如果那是您的想法。

如果您发现自己正在检查您的活动A是否已被“调用”(?),这可能意味着前一个活动(“ B ”)在应用程序的逻辑流程中存在错误,而B应该检查是否它实际上必须启动该活动A。我的意思是,如果您需要决定是否必须调用活动,请在开始之前进行检查。

如果您要重新启动活动(例如:回家,然后返回),我认为这不适用,但是您应该再次从离开的地方重新启动它(我可以告诉B )。您不会导航回A。而且你没有提供太多细节,所以我猜这是某种闪屏,就像 evilmage93 说的那样。

如果这确实是某种闪屏,我建议在用户一路返回以从任务堆栈中删除您的应用程序时显示它(与他的建议相反)。换句话说,每当用户从其“前门”重新启动应用程序时。

虽然这最终是一个设计决定,但我更喜欢在应用程序第一次在堆栈中加载(“进入”)时看到启动画面,如果您(显然)在调用B之前完成A(启动画面应该在完成后自动出现,即使在第一次运行时也是如此)。这是一个一致性问题:只要用户执行相同的任务(从其“前门”启动应用程序),相同的应用程序应该以相同的方式运行。finish

不过,我回答了您的问题,涵盖了一些一般方面,因为您以这种方式提问。

// 编辑:

最后,通过查看,onCreateWasCalledAlreadyBoolean恐怕您可能正在尝试重新发明活动生命周期机制的一部分。在这种情况下,不要:继续您的常规活动逻辑,因为用户期望这种行为。一般来说,我不建议人们仅仅因为它被系统杀死并重新启动而中断活动的正常加载。

于 2012-06-19T04:19:35.507 回答
-1

我不明白为什么不。不重新启动活动不是更简单吗?

你担心什么不好?性能..未捕获的异常..代码清晰?

于 2012-06-19T01:17:43.673 回答