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

在生成 PMD 报告时,我得到了这个错误:Super should be called at the end of the method。通常,您最终会将超级方法保留在顶部(第一条语句),以便首先调用它的父类来初始化。

4

2 回答 2

4

通常,您最终会将超级方法保留在顶部(第一条语句),以便首先调用它的父类来初始化。

以下代码片段向您展示了Activity#onSaveInstanceState(Bundle outState)外观。您可以看到它只保存您通过调用传入的 Bundle 作为参数super.onSaveInstanceState(outState);。因此,在 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);
}
于 2013-08-01T11:27:36.280 回答
0

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

只要您的键不冲突(例如,ID 与 Android 内部使用的相同),两者是相同的。

但话虽如此,谷歌关于活动生命周期的文档显示在最后添加了这个。我仍然会遵循这一点:

// 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);
}
于 2017-06-09T16:02:36.873 回答