Android后退按钮在从意图开始的活动中表现出不可预测的行为

Android后退按钮在从意图开始的活动中表现出不可预测的行为,android,android-intent,android-activity,back,Android,Android Intent,Android Activity,Back,在我的申请中,我有3项活动: MainActivity,这是启动应用程序时出现的主屏幕 设置活动,从main活动 下载活动,从设置活动开始 DownloadActivity为用户提供了一个可下载的应用程序内内容列表。实际下载由Android的下载管理器处理,该管理器显示正在进行的下载的通知。点击该通知将触发一个意图,用户将进入下载活动 现在,如果我执行以下操作: Intent downloadIntent = new Intent(activity.getApplicationContext

在我的申请中,我有3项活动:

  • MainActivity
    ,这是启动应用程序时出现的主屏幕
  • 设置活动
    ,从
    main活动
  • 下载活动
    ,从
    设置活动
    开始
DownloadActivity
为用户提供了一个可下载的应用程序内内容列表。实际下载由Android的
下载管理器处理,该管理器显示正在进行的下载的通知。点击该通知将触发一个意图,用户将进入
下载活动

现在,如果我执行以下操作:

Intent downloadIntent = new Intent(activity.getApplicationContext(), downloadActivity.class);
downloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
activity.getApplicationContext().startActivity(downloadIntent);
  • 启动应用程序,转到
    设置活动
    ,然后转到
    下载活动

  • 开始下载,然后回击两次返回到
    MainActivity

  • 下拉通知并点击download nofification,这会让我回到
    DownloadActivity

  • 回击

  • 重复步骤3和4两次

  • 第一次执行步骤4时,后退按钮将直接将我从
    DownloadActivity
    带到
    MainActivity
    ——我点击通知前应用程序显示的最后一个活动,这就是我想要的

    但是,第二次单击“后退”按钮将在当前活动下方显示第二个
    DownloadActivity
    ,我需要再次单击“后退”按钮才能返回到
    MainActivity

    第三次,有4个
    DownloadActivity
    实例,需要按四次
    Back
    按钮才能返回到
    MainActivity

    处理抽头的代码如下所示:

    Intent downloadIntent = new Intent(activity.getApplicationContext(), downloadActivity.class);
    downloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    activity.getApplicationContext().startActivity(downloadIntent);
    
    activity
    是对启动下载的活动的引用。)


    是什么导致了这种奇怪的行为,我如何才能让“后退”按钮始终返回到应用程序显示的最后一个活动?

    这很简单。这一变化起到了关键作用:

    - downloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    + downloadIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    

    结果证明这是一件容易的事。这一变化起到了关键作用:

    - downloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    + downloadIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);