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

PMD レポートの生成中に、このError: Super should be called at the end of method が発生しました。通常、親クラスが最初に初期化されて呼び出されるように、最終的にスーパー メソッドを一番上 (最初のステートメント) に保持します。

4

2 に答える 2

4

通常、親クラスが最初に初期化されて呼び出されるように、最終的にスーパー メソッドを一番上 (最初のステートメント) に保持します。

次のコード スニペットは、どのようActivity#onSaveInstanceState(Bundle outState)に見えるかを示しています。を呼び出して、引数として渡したバンドルのみを保存することがわかりますsuper.onSaveInstanceState(outState);。そのため、実際にバンドル内に何かを保存する前にスーパー メソッドを呼び出しても意味がありません。

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 の内部で使用されるものと同じであるなど)、2 つのキーは同一です。

しかし、そうは言っても、The Activity のライフサイクルに関する Google のドキュメントでは、これを最後に追加することが示されています。私はまだそれに従います:

// 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 に答える