始终重新创建具有 launchMode singleTop 或 singleTask 的 Activity
Posted
技术标签:
【中文标题】始终重新创建具有 launchMode singleTop 或 singleTask 的 Activity【英文标题】:Activity with launchMode singleTop or singleTask is always recreated 【发布时间】:2017-02-12 21:24:14 【问题描述】:我的应用程序中的 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 与这些标志一起使用,并且发生了相同的行为。有人可以对这种行为提供一些见解吗?
【问题讨论】:
【参考方案1】:您无需创建新的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);
【讨论】:
非常感谢,这有效。我也不需要在意图上设置任何标志。以上是关于始终重新创建具有 launchMode singleTop 或 singleTask 的 Activity的主要内容,如果未能解决你的问题,请参考以下文章
android launchmode singleinstance问题
即使使用 launchMode="singleTask" 也可以启动两次活动
launchMode="singleTask" 不创建新任务