我如何重新启动一个Android活动?我尝试了下面的方法,但是这个活动就是退出了。

public static void restartActivity(Activity act){

        Intent intent=new Intent();
        intent.setClass(act, act.getClass());
        act.startActivity(intent);
        act.finish();

}

当前回答

结合奇怪的SurfaceView生命周期行为与相机。我发现再造()在SurfaceViews的生命周期中表现不佳。在重建周期中,surfaceDestroyed从未被调用。它在onResume (strange)之后被调用,此时我的SurfaceView被销毁。

原来的重新创建活动的方式工作得很好。

Intent intent = getIntent();
finish();
startActivity(intent);

我不知道这到底是为什么,但这只是一个观察,希望可以指导其他人在未来,因为它解决了我的问题,我有与SurfaceViews

其他回答

这是目前为止重启当前活动最简单的方法:

finish();
startActivity(getIntent());

有一种俗气的方法适用于任何活动,包括主要活动。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

当方向改变时,Android通常会重新创建你的活动(除非你覆盖它)。当Android不重新创建你的活动时,这个方法对于180度旋转非常有用。

如果您删除最后一行,您将创建新的act Activity,但您的旧实例仍然是活动的。

你需要重新启动活动,就像方向改变(即你的状态被保存并传递给onCreate(Bundle))?

如果您不这样做,一种可能的解决方法是使用一个额外的虚拟Activity,它将从第一个Activity启动,该任务是启动它的新实例。或者只是在新的调用启动后延迟对act.finish()的调用。

如果您需要保存大部分状态,那么您就陷入了相当大的困境,因为通过将状态传递给新实例来传递状态的所有属性并不是一件简单的事情,特别是在不泄漏旧的Context/Activity的情况下。

请详细说明你要做什么。

如果你从一些片段调用,那么做下面的代码。

Intent intent = getActivity().getIntent();
getActivity().finish();
startActivity(intent);

尽管这个问题已经被回答了很多次。

如果从一个片段重新启动一个活动,我会这样做:

new Handler().post(new Runnable() {

         @Override
         public void run()
         {
            Intent intent = getActivity().getIntent();
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION);
            getActivity().overridePendingTransition(0, 0);
            getActivity().finish();

            getActivity().overridePendingTransition(0, 0);
            startActivity(intent);
        }
    });

所以你可能会觉得这有点过分了? 但是Handler发布允许你在生命周期方法中调用它。我在onRestart/onResume方法中使用了这个方法,当检查用户回到应用程序(安装了一些东西)之间的状态是否发生了变化。

如果没有Handler,如果你在一个奇怪的地方调用它,它只会杀死活动而不会重新启动它。

请随意提问。

欢呼, 克里斯