Yon*_*Nir 7 android android-intent
这是对这个问题的后续问题:
我试图从像这样的片段重新启动我的应用程序:
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();
Run Code Online (Sandbox Code Playgroud)
代码什么也没做.这finish()
是唯一有用的原因.如果我删除finish()
,没有任何反应.这是为什么?
gre*_*lon 26
这适用于 Android > 10,经测试最高可达 Android 13(预览版)
Context ctx = getApplicationContext();
PackageManager pm = ctx.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(ctx.getPackageName());
Intent mainIntent = Intent.makeRestartActivityTask(intent.getComponent());
ctx.startActivity(mainIntent);
Runtime.getRuntime().exit(0);
Run Code Online (Sandbox Code Playgroud)
Dmi*_*nov 10
如果您只是考虑切换到您的首发Activity
,请参阅里卡多的答案.但是这种方法不会重置应用程序的静态上下文,也不会重建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);
}
Run Code Online (Sandbox Code Playgroud)
PS在我的项目中尝试了你的代码 - 无论是否有效都可以finish()
.所以也许你有关于你的活动或片段的具体内容,你还没有写过.
试试这个
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);
Run Code Online (Sandbox Code Playgroud)
请参考下面的代码
Intent intent = new Intent(this, YourHomeActivity.class);
this.startActivity(intent);
this.finishAffinity();
Run Code Online (Sandbox Code Playgroud)
它正在开始您的家庭活动,并取消所有其他活动。对用户来说,这看起来像是重新启动,但是过程是相同的。
归档时间: |
|
查看次数: |
10031 次 |
最近记录: |