protected Dialog onCreateDialog(int id) {
...
AlertDialog.Builder adb = new AlertDialog.Builder(this);
...
mydialog = adb.create();
...
}
但是 onCreateDialog 在 onCreate 之后运行。
protected Dialog onCreateDialog(int id) {
...
AlertDialog.Builder adb = new AlertDialog.Builder(this);
...
mydialog = adb.create();
...
}
但是 onCreateDialog 在 onCreate 之后运行。
如果要向后兼容,请按以下方式进行。
class MyActivity extends Activity {
protected static final class MyNonConfig {
// fill with public variables keeping references and other state info, set to null
}
private boolean isConfigChange;
private MyNonConfig nonConf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
nonConf = (MyNonConfig)getLastNonConfigurationInstance();
if (nonConf == null) { nonConf = new NonConfig(); }
// handle the information of the nonConf objects/variables
...
}
@Override
protected void onStop() {
super.onStop();
isConfigChange = false;
}
@Override
public Object onRetainNonConfigurationInstance() {
isConfigChange = true;
return nonConf;
}
@Override
protected void onDestroy() {
super.onDestroy();
// handle objects in nonConf, potentially based on isConfigChange flag
...
}
nonConf 对象将保留所有配置更改(但不是您的应用程序的真正停止)。此外,isConfigChange 标志可靠地告诉您您的活动是否将立即重新创建。因此,您可以根据此信息充分取消/分离任务或处理其他资源。
编辑:请注意,如果 onDestroy()
被调用,那么您可以依赖该isConfigChange
标志。此外,如果Android 正在处理配置更改,那么 onDestroy()
将被调用。但是,如果Android 即将结束您的 Activity,则对 onDestroy() 的调用是可选的,因为 Android 认为您的 Activity 在它调用onPause()
(预Honeycomb)或onStop()
(Honeycomb 及更高版本)之后是可终止的。但这不是问题,因为如果您的活动将被终止,那么您的众多对象的状态将不再对任何人感兴趣。但是,如果您想友好,这是决定放入什么的另一个方面onPause()
和onStop()
。
希望这可以帮助。