2

在 onCreate、onResume 或仅在声明它们时为您的实例变量提供默认值是否更好?在代码中:

声明它们时:

public Class Foo extends Activity{

    private String variable1 = "my super var";
    private int variable2 = 42;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

或在 onCreate 期间

public class Foo extends Activity{

    private String variable1;
    private int variable2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        variable1 = "my super var";
        variable2 = 42;
    }
}

或在简历中:

public class Foo extends Activity{

    private String variable1;
    private int variable2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    protected void onResume() {
        super.onResume();
        variable1 = "my super var";
        variable2 = 42;
    }   
}

谢谢你。

4

3 回答 3

3

上面的答案很好,它确实取决于编码风格,但通常,除了声明变量时,尽量避免分配默认值。这将有助于可维护性。当你在 6 个月后回到你的代码来修复一个奇怪的错误时,将默认值分散在整个代码中会增加你的麻烦。

仅在有目的的情况下使用 onCreate、onResume 等,然后添加有意义的注释,例如

// re-initialise foobarValue when the app regains focus
// to ensure that the wobbly gong generator starts from the beginning
foobarValue = 1;

干杯

于 2012-04-12T19:12:53.090 回答
2

这一切都取决于您对编码风格的感觉,当然还有被分配的实例变量。通常,我的实例变量中有相当数量是视图,因此取决于是否具有有效的上下文 - 所以我当然会放入onCreate(). 如果我每次离开活动并返回时都需要重置一个变量,那么它必须onResume(). 至于内联,当我知道变量不会改变也不应该改变时,我倾向于这样做,并且我将它们设为final. onCreate()内联构造变量和依赖之间的平衡。有些人可能希望将所有作业集中在一个地方,所以onCreate()作为在单个位置捕获所有分配的一种方式是有意义的,如果您不在乎它们之间没有真正的性能差异,那么将分配放在您想要的位置。

于 2012-04-12T18:50:11.273 回答
0

我认为将其作为默认值或onCreate值是否简单没有很大区别。有什么onCreate好处是如果您需要与活动相关的东西,例如 aContext或来自Intent等的东西。那么您必须在onCreate.

onCreate但是,在vs.中进行这种初始化onResume会产生巨大的差异。如果您将代码放入onResume其中,则每次您重新获得对活动的关注时都会运行(对于确切的定义,您需要阅读文档)。这意味着如果您按下 home 键然后返回到您的应用程序,此代码将再次运行。所以这真的取决于你想要什么行为。

于 2012-04-12T18:53:57.437 回答