强制调用 Android activity 的超类方法?
Mandatory calling superclass methods of an Android activity?
在一个activity的生命周期中,需要一直调用父class的方法吗? .我的意思是:
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);
}
而且我总是必须先调用超级 class 方法吗?例如:
public void onSaveInstanceState(Bundle outState) {
.....my code.......
super.onSaveInstanceState(outState);
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
.......my code......
}
在 onSaveInstanceState 方法上,先写我的代码,然后再写到 superclasss 方法更有意义,而在 onRestoreInstanceState 方法上相反?
谢谢
生命周期方法的文档指出是否需要调用 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_";
所以只要不使用同名的key就可以了
在一个activity的生命周期中,需要一直调用父class的方法吗? .我的意思是:
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);
}
而且我总是必须先调用超级 class 方法吗?例如:
public void onSaveInstanceState(Bundle outState) {
.....my code.......
super.onSaveInstanceState(outState);
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
.......my code......
}
在 onSaveInstanceState 方法上,先写我的代码,然后再写到 superclasss 方法更有意义,而在 onRestoreInstanceState 方法上相反?
谢谢
生命周期方法的文档指出是否需要调用 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_";
所以只要不使用同名的key就可以了