0
protected Dialog onCreateDialog(int id) {
...
AlertDialog.Builder adb = new AlertDialog.Builder(this);
...
mydialog = adb.create();
...
}

但是 onCreateDialog 在 onCreate 之后运行。

4

1 回答 1

2

如果要向后兼容,请按以下方式进行。

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()

希望这可以帮助。

于 2013-01-17T07:46:48.763 回答