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

public static void restartActivity(Activity act){

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

}

当前回答

public void onRestart() {
    super.onRestart();
    Intent intent=new Intent();
    intent.setClass(act, act.getClass());
    finish();
    act.startActivity(intent);
}

试着用这个..

其他回答

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

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

好吧,这里没有列出,但有一些已经发布的组合:

if (Build.VERSION.SDK_INT >= 11) {
    recreate();   
} else {
    Intent intent = getIntent();
    finish();
    startActivity(intent);
}

在SDK 11之前,这样做的方法是这样的:

public void reload() {
    Intent intent = getIntent();
    overridePendingTransition(0, 0);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();
    overridePendingTransition(0, 0);
    startActivity(intent);
}

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

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

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

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

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

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

请详细说明你要做什么。