如何重新启动Android活动
如何重新启动Android Activity ? 我尝试了以下,但Activity只是退出。 
 public static void restartActivity(Activity act){ Intent intent=new Intent(); intent.setClass(act, act.getClass()); act.startActivity(intent); act.finish(); } 
	
我做了这样的主题切换:
 Intent intent = getIntent(); finish(); startActivity(intent); 
 基本上,我打电话给finish()第一,并使用完全相同的意图,这项活动开始。 这似乎是诀窍? 
 更新:正如下面的Ralf所指出的, Activity.recreate()是API 11及更高版本中的方法。 如果你在一个API11 +环境中,这是最好的。 如果您使用的是API 10或更低版本,仍然可以检查当前版本并调用上面的代码片段。  (请不要忘记上传Ralf的答案!) 
由于API级别11(蜂窝),您可以调用该活动的recreate()方法(感谢这个答案)。
recreate()方法的作用与配置更改类似,所以如果适用,还会调用onSaveInstanceState()和onRestoreInstanceState()方法。
在SDK 11之前,一种方法是这样的:
 public void reload() { Intent intent = getIntent(); overridePendingTransition(0, 0); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); overridePendingTransition(0, 0); 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); } 
这个解决方案为我工作。
首先完成活动,然后再次启动。
示例代码:
 public void restartActivity(){ Intent mIntent = getIntent(); finish(); startActivity(mIntent); } 
 我使用这个代码,所以我仍然可以支持较旧的Android版本,并在较新的Android版本上使用recreate() 。 
码:
 public static void restartActivity(Activity activity){ if (Build.VERSION.SDK_INT >= 11) { activity.recreate(); } else { activity.finish(); activity.startActivity(activity.getIntent()); } } 
样品:
 import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Activity mActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mActivity = MainActivity.this; Button button = (Button) findViewById(R.id.restart_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { restartActivity(mActivity); } }); } public static void restartActivity(Activity activity) { if (Build.VERSION.SDK_INT >= 11) { activity.recreate(); } else { activity.finish(); activity.startActivity(activity.getIntent()); } } } 
调用这个方法
 private void restartFirstActivity() { Intent i = getApplicationContext().getPackageManager() .getLaunchIntentForPackage(getApplicationContext().getPackageName() ); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK ); startActivity(i); } 
谢谢,
尽管这已经被多次回答了。
如果从一个片段重新开始一个活动,我会这样做:
 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如果你把它叫在一个奇怪的地方,它只会杀死该活动,而不是重新启动它。 
随意问任何问题。
干杯,克里斯
那么这是不是列出,但已经发布的一些组合:
 if (Build.VERSION.SDK_INT >= 11) { recreate(); } else { Intent intent = getIntent(); finish(); startActivity(intent); } 
这是重启当前活动最简单的方法:
 finish(); startActivity(getIntent()); 
实际上下面的代码对于5级以上的API是有效的,所以如果你的目标API比这个低,你最终会得到和EboMike代码非常相似的东西。
 intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); overridePendingTransition(0, 0); 
对于任何活动,包括主要的活动,都有一种可笑的方法。
 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
当方向改变时,Android通常会重新创建你的活动(除非你重写)。 当Android不重新创建您的活动时,此方法适用于180度旋转。
 public void onRestart() { super.onRestart(); Intent intent=new Intent(); intent.setClass(act, act.getClass()); finish(); act.startActivity(intent); } 
尝试使用这个..
结合奇怪的SurfaceView生命周期行为与相机 。 我发现recreate()在SurfaceView的生命周期中表现不好。 surfaceDestroyed在娱乐周期中从来没有被称为。 它在onResume(奇怪)之后调用,在这一点上我的SurfaceView被销毁。
重新创建活动的原始方式正常工作。
 Intent intent = getIntent(); finish(); startActivity(intent); 
我无法弄清楚这是为什么,但这只是一个观察,希望可以引导其他人在未来,因为它解决了我与SurfaceViews的问题
 如果你删除最后一行,你将创建新的act活动,但你的旧实例仍然活着。 
 你需要重新启动活动,如方向改变(即你的状态被保存并传递给onCreate(Bundle) )? 
 如果你不这样做,一个可能的解决方法是使用一个额外的,假的活动,这将从第一个活动开始,以及哪个工作是开始新的实例。 或者只是在新的启动后延迟对act.finish()的调用。 
如果你需要保存大部分的状态,那么你将进入相当深的水域,因为通过状态的所有属性,特别是不泄漏旧的上下文/活动,通过将它传递给新的实例是不平凡的。
请指出你想要做什么。
你的问题的解决方案是:
 public static void restartActivity(Activity act){ Intent intent=new Intent(); intent.setClass(act, act.getClass()); ((Activity)act).startActivity(intent); ((Activity)act).finish(); } 
您需要投入到活动上下文来启动新的活动,以及完成当前的活动。
希望这有助于…为我工作。
如果你是从一些片段调用,那么下面的代码。
 Intent intent = getActivity().getIntent(); getActivity().finish(); startActivity(intent); 
 调用onCreate方法。 例如onCreate(null);