重新启动Android应用程序编程
这是一个后续问题,这个问题:重新启动Android应用程序编程
Force application to restart on first activity
我想从这样的片段重新启动我的应用程序:
Toast.makeText(getActivity(), "Restarting app", Toast.LENGTH_SHORT).show();
Intent i = getActivity().getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getActivity().getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
getActivity().finish();
代码什么也不做。由于某种原因,finish()
是唯一的工作。如果我删除了finish()
,没有任何反应。这是为什么?
如果你只是考虑切换到你的出发Activity
,请参阅Ricardo's答案。但是这种方法不会重置应用程序的静态上下文,也不会重新构建Application
类,所以应用程序将不会真正重新启动。
如果你想完全重新启动你的应用程序,我可以建议更激进的方式,使用PendingIntent
。
private void restartApp() {
Intent intent = new Intent(getApplicationContext(), YourStarterActivity.class);
int mPendingIntentId = MAGICAL_NUMBER;
PendingIntent mPendingIntent = PendingIntent.getActivity(getApplicationContext(), mPendingIntentId, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
System.exit(0);
}
P.S.在我的项目中尝试了您的代码 - 与finish()
一起运行良好。所以也许你有一些关于你的活动或片段的具体内容,你没有写。
您应该考虑使用* * android.os.Process.killProcess(android.os.Process.myPid()); ** –
一旦你添加此FLAGS
的意图
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
,并呼吁startActivity()
,它会清除所有其他活动,包括一个你调用该方法,因此调用finish()
后startActivity()
将关闭开始活动。基本上删除getActivity().finish()
。
我在问题中专门写了一句话:“如果我删除了finish(),没有任何反应。“ –
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
怎么是比我已经做了 –
尝试使用下面几行:
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
ActivityCompat.finishAfterTransition(YourCurrentActivity.this);
ActivityCompat.finishAfterTransition(YourCurrentActivity.this);这条线清除实例创建另一个活动
方法finishAfterTransition(活动)不同的是未定义类型ActivityCompat –
在我的情况下,其工作完全正常 –
后,请参考下面的代码
Intent intent = new Intent(this, YourHomeActivity.class);
this.startActivity(intent);
this.finishAffinity();
它开始你家的活动并关闭所有其他活动。它看起来像是重新启动给用户,但过程是一样的。
试试这个
Intent intent = getActivity().getBaseContext().getPackageManager().getLaunchIntentForPackage(getActivity().getBaseContext().getPackageName());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
为什么你有这两个特定意图的标志? –
https://stackoverflow.com/questions/17294428/how-to-restart-an-application-completely –
可能重复[如何以编程方式“重新启动”Android应用程序?](https:// stackoverflow。 com/questions/6609414/how-do-i-programmatically-restart-an-android-app) – Zoe
你在哪里执行这段代码?这是在一个'活动'?如果是这样,哪一个?请张贴您的清单。你究竟想要完成什么? –