我如何重新启动一个Android活动?我尝试了下面的方法,但是这个活动就是退出了。
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
我如何重新启动一个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()方法。
其他回答
把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);
}
结合奇怪的SurfaceView生命周期行为与相机。我发现再造()在SurfaceViews的生命周期中表现不佳。在重建周期中,surfaceDestroyed从未被调用。它在onResume (strange)之后被调用,此时我的SurfaceView被销毁。
原来的重新创建活动的方式工作得很好。
Intent intent = getIntent();
finish();
startActivity(intent);
我不知道这到底是为什么,但这只是一个观察,希望可以指导其他人在未来,因为它解决了我的问题,我有与SurfaceViews
如果有人在找科特林的答案你只需要这句话。
片段
startActivity(Intent.makeRestartActivityTask(activity?.intent?.component))
活动
startActivity(Intent.makeRestartActivityTask(this.intent?.component))
调用这个方法
private void restartFirstActivity()
{
Intent i = getApplicationContext().getPackageManager()
.getLaunchIntentForPackage(getApplicationContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK );
startActivity(i);
}
谢谢,
有一种俗气的方法适用于任何活动,包括主要活动。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
当方向改变时,Android通常会重新创建你的活动(除非你覆盖它)。当Android不重新创建你的活动时,这个方法对于180度旋转非常有用。