3 回答
TA贡献1790条经验 获得超9个赞
以下是使用PackageManager以通用方式重新启动应用程序的示例:
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
TA贡献1875条经验 获得超3个赞
标记为“回答”的解决方案有效,但有一个对我来说至关重要的缺点。使用FLAG_ACTIVITY_CLEAR_TOP,您的目标活动将在您的旧活动堆栈收到onDestroy之前调用onCreate。虽然我已经在onDestroy中清除了一些必要的东西,但我不得不工作。
这是对我有用的解决方案:
public static void restart(Context context, int delay) {
if (delay == 0) {
delay = 1;
}
Log.e("", "restarting app");
Intent restartIntent = context.getPackageManager()
.getLaunchIntentForPackage(context.getPackageName() );
PendingIntent intent = PendingIntent.getActivity(
context, 0,
restartIntent, Intent.FLAG_ACTIVITY_CLEAR_TOP);
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC, System.currentTimeMillis() + delay, intent);
System.exit(2);
}
我们的想法是通过AlarmManager触发PendingIntent,稍后会调用它,给旧活动堆栈一些时间来清理。
TA贡献1898条经验 获得超8个赞
android:clearTaskOnLaunch="true"
android:launchMode="singleTask"
在启动类(第一个活动)的清单文件中使用此属性。
- 3 回答
- 0 关注
- 447 浏览
添加回答
举报