我不知道这种行为是否正常,因为我认为对 finish() 的调用会阻止重新创建活动。
以下是活动类的摘录:
public class MyActivity extends FragmentActivity {
private RetainFragment retainFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
......
retainFragment = getSupportFragmentManager().findFragmentByTag("RetainFragment");
if(retainFragment == null) {
retainFragment = new RetainFragment();
getSupportFragmentManager().beginTransaction().add(retainFragment, "RetainFragment").commitAllowingStateLoss();
}
if(retainFragment.isFinish) {
Log.v("MyActivity", "isFinish == true");
this.finish();
}
}
// a on-click event handler for a finish button
public void onFinishClicked(View view) {
retainFragment.isFinish = true;
this.finish();
}
private class RetainFragment extends Fragment {
private boolean isFinish = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRetainInstance(true);
}
}
}
活动是持久的(我也将其他持久变量存储在 RetainFragment 中,但我没有显示它们)并且仅在用户单击完成按钮后关闭,此时将调用 onFinishClicked(View) 和活动应该由系统完成。我预计它不会在屏幕同时旋转后被系统重新创建。这种情况很少发生,我通过在 onCreate() 方法中再次调用 finish() 来处理它。但是,这里看起来很丑,因为完成的活动应该永远死掉,现在我必须明确地处理它。:( 我对活动生命周期或保留片段有任何误解吗?