我不知道这种行为是否正常,因为我想调用 finish() 会停止重新创建 Activity 。
这是 Activity 类的摘录:
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);
}
}
}
Activity 是持久的(我也将其他持久变量存储在 RetainFragment 中,但我没有显示它们)并且仅在用户单击完成按钮后关闭,此时 onFinishClicked(View) 将被调用, Activity 应该由系统完成。我不希望它在同步屏幕旋转后由系统重新创建。这种情况很少发生,我通过在 onCreate() 方法中再次调用 finish() 来处理它。但是,它在这里看起来很丑陋,因为完成的 Activity 应该永远死掉,现在我必须明确地处理它。 :( 我对activity lifecycle或者retain fragment有什么误解吗?
最佳答案
如果您在 Android 上工作,每当您听到自己说“此 Activity 将仅在 X
之后关闭”时。不。您永远不应依赖具有高度受控生命周期的 Activity。您的 Activity 应该设计成无论何时销毁和重新创建,它都能正常工作。
要在旋转等过程中保留信息,请将代码添加到 onSaveInstanceBundle
,然后在 onCreate
上检查它并提取保存的值。
关于android - 在一致的方向更改后重新创建完成的 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647494/