1

我很抱歉标题,我找不到更好的方式来简要描述我的问题。这是我的场景。有两个应用,A 和 B。应用 A 有一个活动 A1,应用 B 有三个活动 B1、B2 和 B3。

Activity B1 是透明的并作为代理工作,我为 B1 定义了意图过滤器,因此 A1 可以向 B1 触发隐式意图。根据意图的额外内容,B1 然后将触发一个明确的意图来启动 B2 或 B3,然后自行完成。B2 和 B3 没有任何意图过滤器,并且应该仅由来自 B1 的显式意图触发。B1/B2/B3设计的原因是因为

  • 我拥有应用程序 B,但不是 A,因此我无法更改 A 触发意图的方式
  • 我想通过多个活动而不是单个活动来改进应用 B 的用户体验

这是活动 B1 中的“代理代码”

public void onStart() {
    super.onStart();

    // useB2() is some helper method that looks at intent's extra
    // and decides if we should start B2 or B3
    boolean useB2Activity = useB2(this.getIntent());

    Intent intent = (Intent) getIntent().clone();
    intent.setClass(this, useB2Activity ? B2.class : B3.class);
    startActivity(intent);

    finish();
}

问题:如果我第一次从应用 A 转到应用 B,我可以看到 B1 的 onStart() 被调用,然后它启动 B2(例如)。之后,每当我从应用 A 转到应用 B 时,都不会调用 B1 的 onStart(),而直接调用 B2 的 onResume()。出于某种原因,从 A1 触发的所有后续意图都不会转到 B1。相反,它会恢复 B2(或 B3,具体取决于第一次调用 B1 的 onStart() 时创建的那个)。我不知道这里有什么问题。请帮忙。谢谢。

4

1 回答 1

0

让我们分析您的代码:

Intent intent = (Intent) getIntent().clone();//intent -->B1
intent.setClass(this, useB2Activity ? B2.class : B3.class);
//now your intent-->B2/B3
startActivity(intent);//-->start B2/B3
finish();//Finish B1 but B2/B3 is still alive

现在,如果您从 A 调用 B--> 它转到 B2/B3 onResume,因为 B2/B3 还活着!

如果要每次都启动 B1,请lanchMode在 xml manifest 中修改。

<Activity B1....
     android:clearTaskOnLaunch="true"
     android:launchMode="singleTop"
>

如果您想在第 n 次使用中再次调用某个方法,您应该将代码从onStart()移至onResume().

public void onResume() {
    super.onResume();

    // Your code here!
}
于 2015-11-10T23:34:24.750 回答