0

私のアプリでは、特定の結果コードを使用して、これが必要なときにアプリ全体を終了します(つまり、アクティビティスタック内の私のアプリに属する​​すべてのアクティビティを終了します)。すべてのアクティビティはstartActivityForResult()で開始されます。結果コードはonActivityResult()でキャプチャされ、そこからアクティビティスタック内の次のアクティビティに渡されます。これは、特定の結果コードが使用されているときに、各アクティビティがそれ自体を終了することに要約されます。

うまく機能します..1つを除いてすべての場合:

A-> B-> Aで構成されるアクティビティスタックについて考えてみます。最後のA(シーケンスの右側)は、それ自体を終了し、他のアクティビティも終了するための結果コードを設定することによって手順を開始します。Bが終了し、結果コードを最初のA(シーケンスの左側のA)に渡した後、onActivityResult()が呼び出されないことがわかります。

最初のAに到達したときに、onDestroy()がスタックの最上位のA(シーケンスの右側のA)に対してまだ呼び出されていないことは言及する価値があります。

この問題を修正または回避するにはどうすればよいですか?

4

1 に答える 1

0

この問題は、アクティビティが次のコードで記述されたメニューから開始された場合にのみ発生することが判明しました。

    private static final int MENU_ITEM_A = 0;
    private static final int MENU_ITEM_B = 1;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       menu.add(0, MENU_ITEM_A, 0, R.string.menu_item_a);
       menu.add(0, MENU_ITEM_B, 0, R.string.menu_item_b);
       return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
       intent = null;

       switch (item.getItemId()) {
       case MENU_ITEM_A:
          intent = new Intent(this, ActivityA.class);
          break;
       case MENU_ITEM_B:
          intent = new Intent(this, ActivityB.class);
          break;
       default:
          intent = null;
          Log.e(TAG, "Unkown menu item.");
       }
       if (intent != null) {
          intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
          startActivityForResult(intent,
                ActivityHelper.AUTO_CLOSE_REQUEST_CODE);
       }
       return super.onOptionsItemSelected(item);
    }

これが文字列リソースです

    <string name="menu_item_a">Start Activity A</string>
    <string name="menu_item_b">Start Activity B</string>

このコードをinazarukのコードサンプルのベースアクティビティに追加するだけで、自分の目で確かめることができます。メニューでアクティビティAとアクティビティBを数回切り替えてから、スタック内のすべてのアクティビティを閉じてみてください。うまくいかないだろう。

これで、原因はインテントフラグであると考えられます。

Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

ただし、このフラグをinazarukのコード内のすべてのインテントに追加すると、これは除外されます。

誰かが何が起こっているのかを正確に説明できれば、それを聞くのは素晴らしいことです。

于 2011-07-22T11:07:20.147 に答える