意图不会达到预期的活动并恢复意外的活动

时间:2015-11-10 22:27:22

标签: android android-intent explicit-intent

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

活动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(例如)。之后,每当我从app A转到app B时,都不会调用B1的onStart(),而是直接调用B2的onResume()。出于某种原因,从A1发射的所有后续意图都不会进入B1。相反,它会恢复B2(或B3,具体取决于第一次调用B1&#39的onStart()时创建的)。我不知道这里有什么问题。请帮忙。感谢。

1 个答案:

答案 0 :(得分: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,请修改xml清单中的lanchMode

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

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

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

    // Your code here!
}