1

タイトルで申し訳ありませんが、私の問題を簡単に説明するより良い方法が見つかりません。これが私のシナリオです。A と B の 2 つのアプリがあります。アプリ A には 1 つのアクティビティ A1 があり、アプリ B には 3 つのアクティビティ B1、B2、B3 があります。

アクティビティ B1 は透過的であり、プロキシとして機能します。B1 のインテント フィルターを定義して、A1 が B1 に対して暗黙的なインテントを起動できるようにします。インテントのエクストラに応じて、B1 は明示的なインテントを起動して B2 または B3 のいずれかを開始し、それ自体を終了します。B2 と B3 にはインテント フィルターがなく、B1 からの明示的なインテントによってのみトリガーされるはずです。B1/B2/B3のデザインの理由は

  • 私はアプリ B を所有していますが、A を所有していないため、A がインテントを起動する方法を変更することはできません
  • アプリ B の UX を単一のアクティビティではなく複数のアクティビティで改善したい

アクティビティ 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 (または B1 の onStart() が呼び出されたときに最初に作成されたものに応じて B3) を再開します。ここで何が問題なのかわかりません。助けてください。ありがとう。

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 を呼び出すとonResume、B2/B3 が生きているため、B2/ B3 に移動します。

毎回 B1 を起動したい場合はlanchMode、xml マニフェストで変更します。

<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 に答える