protected Dialog onCreateDialog(int id) {
...
AlertDialog.Builder adb = new AlertDialog.Builder(this);
...
mydialog = adb.create();
...
}
但onCreateDialog在onCreate之后运行。
答案 0 :(得分: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即将结束您的活动,那么对onDestroy()的调用是可选,因为Android认为您的活动在调用onPause()
后立即被激活(蜂窝前)或onStop()
(蜂窝及以后)。这不是问题,因为如果你的活动将被杀死,你的众多物品的状态对任何人都不再有意思了。但是,如果您想要友好,那么就决定将哪些内容放入onPause()
和onStop()
时,这是另一个需要考虑的方面。
希望这有帮助。