我认为这是您想要的行为:
singleTask 出于某种我不明白的迟钝原因重置了家庭印刷机上的堆栈。解决方案是不使用 singleTask 而是使用标准或singleTop来进行启动器活动(尽管到目前为止我只尝试过 singleTop )。
因为应用程序彼此之间具有亲和力,所以启动这样的活动:
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if(launchIntent!=null) {
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
}
将导致您的活动堆栈按原样重新出现,而不会在旧活动上启动新活动(这是我之前的主要问题)。标志是重要的:
FLAG_ACTIVITY_NEW_TASK 在 API 级别 1 中添加
如果设置,此活动将成为此历史堆栈上新任务的开始。任务(从启动它的活动到下一个任务活动)定义了用户可以移动到的活动的原子组。任务可以移到前台和后台;特定任务中的所有活动始终保持相同的顺序。有关任务的更多信息,请参阅任务和返回堆栈。
该标志通常由想要呈现“启动器”样式行为的活动使用:它们为用户提供可以完成的单独事情的列表,否则这些事情会完全独立于启动它们的活动运行。
使用此标志时,如果您现在正在启动的 Activity 已经在运行任务,则不会启动新的 Activity;相反,当前任务将简单地以其上次所处的状态被带到屏幕的前面。有关禁用此行为的标志,请参见 FLAG_ACTIVITY_MULTIPLE_TASK。
当调用者从正在启动的活动中请求结果时,不能使用此标志。
和:
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 在 API 级别 1 中添加
如果设置,并且此活动在新任务中启动或将现有任务置于顶部,则它将作为任务的前门启动。这将导致应用使该任务处于适当状态所需的任何关联(将活动移入或移出),或者在需要时将该任务简单地重置为其初始状态。
没有它们,启动的活动将被推送到旧堆栈或其他一些不良行为的顶部(当然在这种情况下)
我相信没有收到最新 Intent 的问题可以这样解决(我想不到):
@Override
public void onActivityReenter (int resultCode, Intent data) {
onNewIntent(data);
}
试试看!