2016-11-01 7 views
1

アクティビティのライフサイクルでは、常に親クラスのメソッドを呼び出す必要がありますか?Androidアクティビティの必須のスーパークラスメソッドを呼び出していますか?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);  
} 

public void onStart() { 
    super.onStart(); 

} 



protected void onResume() { 
    super.onResume(); 

} 

protected void onPause() { 
    super.onPause(); 


} 



protected void onStop() { 
    super.onStop(); 

} 

protected void onDestroy() { 
    super.onDestroy(); 

} 

protected void onRestart() { 
    super.onRestart(); 

} 


public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

} 


public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

} 

そして、私はいつも最初にスーパークラスのメソッドを呼び出す必要があります:私は意味.Whatのですか?それは最初と後superclasss方法へとopossite onRestoreInstanceState方法で私のコードを書くためのより多くの意味を持っているonSaveInstanceState方法で

public void onSaveInstanceState(Bundle outState) { 
    .....my code....... 
    super.onSaveInstanceState(outState); 

} 


public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    .......my code...... 

} 

:たとえば? super.onXXX()の呼び出しが必要とされているかどうかのライフサイクルメソッド用

おかげ

+0

[なぜAndroidでスーパーに電話する必要があるのですか?](http://stackoverflow.com/questions/10843383/why-do-we-have-to-call-super-in-android-時々) – Real73

答えて

2

ドキュメントが示しています。いくつかの方法ではこれが必要ですが、いくつかの方法ではそうではありません。

super.onXXX()にコールする必要があるライフサイクルメソッドでは、いつでもそのメソッドを呼び出すことができます。あなたのコードの前でも後でもかまいません。

onSaveInstanceState()onRestoreInstanceState()については、コードの前後にsuper.onXXX()に電話するかどうかは関係ありません。うまくいけば、保存されたインスタンスBundleに入れたものは、Androidフレームワークが入れているものと矛盾しません。Bundle。矛盾する場合は、コードの前後にsuperメソッドを呼び出しても問題は発生しません。

注:保存されたインスタンスBundleで見るとダイアログ情報を入れたときにAndroidのフレームワークは、以下のキーを使用しています:

static final String FRAGMENTS_TAG = "android:fragments"; 
private static final String WINDOW_HIERARCHY_TAG = "android:viewHierarchyState"; 
private static final String SAVED_DIALOG_IDS_KEY = "android:savedDialogIds"; 
private static final String SAVED_DIALOGS_TAG = "android:savedDialogs"; 
private static final String SAVED_DIALOG_KEY_PREFIX = "android:dialog_"; 
private static final String SAVED_DIALOG_ARGS_KEY_PREFIX = "android:dialog_args_"; 

ので、限り、あなたは同じ名前のキーを使用していないとして、あなたはする必要があります良い。

関連する問題