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

public static void restartActivity(Activity act){

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

}

当前回答

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

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

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

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

请详细说明你要做什么。

其他回答

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

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

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

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

把Ralf和Ben的回答(包括评论中的变化)结合起来:

if (Build.VERSION.SDK_INT >= 11) {
    recreate();
} else {
    Intent intent = getIntent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();
    overridePendingTransition(0, 0);

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

简单的方法是

    public void restartActivity(){
    Intent i = getIntent();
    finish();
    startActivity(i);
}

我想知道为什么没有人提到Intent.makeRestartActivityTask(),它清楚地说明了这个确切的目的。

创建一个可以用来重新启动应用程序任务的Intent *在它的基态。

startActivity(Intent.makeRestartActivityTask(getActivity().getIntent().getComponent()));

这个方法设置Intent。|意图。FLAG_ACTIVITY_CLEAR_TASK作为默认标志。

我就是这么做的。

        val i = Intent(context!!, MainActivity::class.java)
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
        startActivity(i)