我认为这是您想要的行为:
singleTask因某些愚蠢的原因在主屏幕按下后会重置堆栈,我不理解这一点。解决方法是不使用singleTask,而是改用标准(standard)或者栈顶复用(singleTop)来代替启动器活动(launcher activity)(到目前为止,我只尝试过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中添加
如果设置了此标志,则此活动将成为此历史堆栈上的新任务的起点。从启动它的活动到下一个任务活动的任务定义了用户可以移动到的原子活动组。任务可以移到前台和后台;特定任务内的所有活动始终保持相同的顺序。有关任务的更多信息,请参阅任务和返回堆栈。
该标志通常由希望呈现“启动器”样式行为的活动使用:它们给用户提供了可以独立完全运行的不同事情列表。
当使用此标志时,如果对于您现在要启动的活动已经正在运行任务,则不会启动新活动;相反,当前任务将简单地以其上次状态带到屏幕前面。有关禁用此行为的标志,请参见FLAG_ACTIVITY_MULTIPLE_TASK。
调用者请求从正在启动的活动中获得结果时,无法使用此标志。
以及:
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED API级别1中添加
如果设置,并且此活动正在启动新任务或将现有任务置于顶部,则会将其作为任务的前门启动。这将导致应用程序应用需要使该任务处于适当状态的任何关联(将活动移至其中或从其中移动),或者仅在需要时重置该任务的初始状态。
如果没有它们,启动的活动将只是推到旧堆栈的顶部或其他不良行为(在这种情况下)
我认为不能接收最新Intent的问题可以通过以下方式解决(脑海中):
@Override
public void onActivityReenter (int resultCode, Intent data) {
onNewIntent(data);
}
试一试吧!