应该在方法结束时调用Super

时间:2013-08-01 11:03:32

标签: android

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    ((CustomApplication) getApplication()).detach(this);    
}

在生成PMD报告时,我得到了错误:应该在方法结束时调用超级。通常,您最终会将super方法保留在顶部(First Statement),以便首先将其父类调用为initialized。

2 个答案:

答案 0 :(得分:4)

  

通常你最终会将超级方法保持在最顶层(首先   声明)以便首先调用其父类初始化。

以下代码段显示Activity#onSaveInstanceState(Bundle outState)的外观。您可以看到它只通过调用super.onSaveInstanceState(outState);来保存您作为参数传入的Bundle。因此,在实际保存Bundle内部之前调用super方法是没有意义的。

protected void onSaveInstanceState(Bundle outState) {
    outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState());
    Parcelable p = mFragments.saveAllState();
    if (p != null) {
        outState.putParcelable(FRAGMENTS_TAG, p);
    }
    getApplication().dispatchActivitySaveInstanceState(this, outState);
}

答案 1 :(得分:0)

根据这个SO,只要密钥没有碰撞,你在哪里调用它并不重要。它们应该是等价的。

  

只要您的密钥没有冲突(例如,ID与Android内部使用的ID相同),两者就完全相同。

但话虽如此,谷歌关于The Activity's Lifecycle的文档显示最后添加此内容。我仍然会遵循这一点:

// invoked when the activity may be temporarily destroyed, save the instance state here
@Override
public void onSaveInstanceState(Bundle outState) {
    out.putString(GAME_STATE_KEY, mGameState);
    out.putString(TEXT_VIEW_KEY, mTextView.getText());

    // call superclass to save any view hierarchy
    super.onSaveInstanceState(out);
}