窗口小部件打开无效的应用活动,从而导致后退按钮行为异常

时间:2018-10-07 05:18:39

标签: java android android-activity android-widget android-navigation

因此,我有一个活动,该活动可能有两个不同的父活动,具体取决于它从何处启动。根据启动哪个活动,后退按钮(应用程序栏和系统后退按钮)在应用程序中能否正常运行。

我的应用程序的小部件打开具有暂挂意图的相同活动。它这样做正确。实际上,如果尚未完全关闭应用程序,则在单击小部件时,此后退按钮逻辑仍然可以正常运行。

示例:活动A开始活动C,后退按钮从C变为A。活动A启动活动B,然后启动活动C,因此向后导航为C-> B-> A。在应用中以及C的小部件履历中,通过待定的意图,这都可以正常工作。

当用户关闭应用程序时(即通过单击概述按钮并将其删除将其从活动中清除),就会出现问题。一旦发生这种情况,应用程序小部件通过打开正确的活动仍然可以正常运行,但是后退按钮会将用户返回到Android主屏幕,而不是正确的父活动。 (即NO C-> AC-> B-> A,仅C-> home screen。 )

当前在清单中没有为我的启动活动声明父活动。

问题::当系统从内存中清除应用程序时,如何保持向后正确导航到哪个活动?有没有办法声明两个父活动并根据意图包选择一个?还是声明通过意图传递的数据导航回哪个活动的另一种方法? (活动UI根据启动哪个活动以及通过应用程序小部件待定意图保留的信息而略有不同。)

仅供参考::为防万一,活动C将此代码用于向后功能:

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) // Press Back Icon
    {
        onBackPressed();
    }

    return super.onOptionsItemSelected(item);
  }
  @Override
    public void onBackPressed() {
    super.onBackPressed();
  }

此外,我知道我可以通过onBackPressed()方法来启动新活动,但是如果我这样做了,我就需要以某种方式知道小部件是全新打开活动还是从系统活动堆栈中恢复活动,而不是从已经正常运行的活动导航中弄乱了活动BC的向后导航。

0 个答案:

没有答案