android - 在一致的方向更改后重新创建完成的 Activity

标签 android orientation restart oncreate activity-finish

我不知道这种行为是否正常,因为我想调用 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/

相关文章:

uninstallation - 如何在 InstallShield 2009 Premier 中卸载基本 MSI 项目后强制重启

Android:如何以编程方式将 Activity 的主题设置为 Theme.Dialog

android - 在 Android 中动态加载类时发生 ClassCastException

android - GCM - Android 模拟器上的 PHONE_REGISTRATION_ERROR

javascript - 获取 Threejs 场景和相机方向以设置默认 View

Android 在 setContentView 之后应用设置

发送模拟位置时 Android 模拟器重新启动

android - 当 Http Post 成功完成并等待响应时互联网连接丢失怎么办?

objective-c - ios:向 ARView 添加指南针

java - 使用没有 sudo 权限的 java 重新启动运行 ubuntu 的计算机?