2016-11-01 41 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); 

} 

我是否總是必須先調用超類方法?例如:

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

} 


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

} 

在它有更多的意義,第一,後到superclasss方法和onRestoreInstanceState方法opossite寫我的onSaveInstanceState代碼的方法?

感謝

+0

可能的重複[爲什麼我們必須在Android中調用超級有時?](http://stackoverflow.com/questions/10843383/why-do-we-have-to-call-super-in-android-有時) – Real73

回答

2

的文檔生命週期方法表明,如果在調用super.onXXX()需要與否。對於某些方法來說這是必需的,對於某些方法則不是。

對於需要撥打至super.onXXX()的生命週期方法,您可以隨時調用該方法。它可以在你的代碼之前或之後。

對於onSaveInstanceState()onRestoreInstanceState(),在代碼之前還是之後調用super.onXXX()也應該沒有區別。希望你在保存的實例Bundle中放入的內容與Android框架在Bundle中放置的內容不衝突。如果它衝突,無論您在代碼之前還是之後調用super方法,都會遇到問題。

注意:Android框架將視圖和對話信息中保存的實例Bundle時使用下面的鍵:

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_"; 

所以只要你不使用鍵使用相同的名稱,您應該好。