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

public static void restartActivity(Activity act){

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

}

当前回答

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

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

其他回答

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

试着用这个..

把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);
}

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

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

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

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

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

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

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,如果你在一个奇怪的地方调用它,它只会杀死活动而不会重新启动它。

请随意提问。

欢呼, 克里斯

如果有人在找科特林的答案你只需要这句话。

片段

startActivity(Intent.makeRestartActivityTask(activity?.intent?.component))

活动

startActivity(Intent.makeRestartActivityTask(this.intent?.component))