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

public static void restartActivity(Activity act){

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

}

当前回答

由于API级别11 (Honeycomb),您可以调用活动的rebuild()方法(多亏了这个答案)。

rebuild()方法的作用就像配置更改一样,因此如果适用,也会调用onSaveInstanceState()和onRestoreInstanceState()方法。

其他回答

这个解决方案对我很有效。

首先完成活动,然后再开始。

示例代码:

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

我就是这么做的。

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

实际上,下面的代码适用于API级别5及以上,所以如果您的目标API低于这个级别,您将得到与EboMike的代码非常相似的代码。

intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
overridePendingTransition(0, 0);

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

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

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

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

请详细说明你要做什么。

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

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

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

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