Activity 使用 launchMode singleTop 或 singleTask 总是重新创建
Activity with launchMode singleTop or singleTask is always recreated
我的应用程序中的 MainActivity 在清单文件中定义了 launchMode
个 singleTop
。每当我单击通知时,都会重新创建我的 MainActivity 并销毁旧实例。当单击通知时,MainActivity 是可见的并且在前台,所以我假设意图将传递给当前实例的 onNewIntent()
,但这从未发生过。这是我创建的意图:
Intent resultIntent = new Intent(App.getInstance(), MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(App.getInstance());
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = PendingIntent.getActivity(App.getInstance(), 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
我有时会像这样将 FLAG_ACTIVITY_CLEAR_TOP
和 FLAG_ACTIVITY_SINGLE_TOP
添加到意图中:
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
我也尝试过将 singleTask
launchMode 与这些标志一起使用,并且发生了相同的行为。有人可以对此行为提供一些见解吗?
您不需要创建新的 TaskStackBuilder
。尝试像您想要重新启动应用程序一样运行的意图,但 singleTop
将阻止它这样做:
Intent resultIntent = new Intent(App.getInstance(), MainActivity.class);
resultIntent.setAction(Intent.ACTION_MAIN);
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent resultPendingIntent = PendingIntent.getActivity(App.getInstance(), 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
我的应用程序中的 MainActivity 在清单文件中定义了 launchMode
个 singleTop
。每当我单击通知时,都会重新创建我的 MainActivity 并销毁旧实例。当单击通知时,MainActivity 是可见的并且在前台,所以我假设意图将传递给当前实例的 onNewIntent()
,但这从未发生过。这是我创建的意图:
Intent resultIntent = new Intent(App.getInstance(), MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(App.getInstance());
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = PendingIntent.getActivity(App.getInstance(), 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
我有时会像这样将 FLAG_ACTIVITY_CLEAR_TOP
和 FLAG_ACTIVITY_SINGLE_TOP
添加到意图中:
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
我也尝试过将 singleTask
launchMode 与这些标志一起使用,并且发生了相同的行为。有人可以对此行为提供一些见解吗?
您不需要创建新的 TaskStackBuilder
。尝试像您想要重新启动应用程序一样运行的意图,但 singleTop
将阻止它这样做:
Intent resultIntent = new Intent(App.getInstance(), MainActivity.class);
resultIntent.setAction(Intent.ACTION_MAIN);
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent resultPendingIntent = PendingIntent.getActivity(App.getInstance(), 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);