A, B, C のアクティビティがあります。
A は B の親、B は C の親になります。(AndroidManifest.xml に記述済み)

A -> B -> C のように遷移をした時に UP ボタンを押すと、B に遷移します。期待通りです。
しかし A -> C のように遷移をした時に UP ボタンを押すと、A に遷移してしまいます。

コードはAndroid のドキュメントと同じようにしています。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

そこで、次のように、startActivity を利用する形に変更したら、期待通り B に遷移することが出来ました。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Intent intent = NavUtils.getParentActivityIntent(this);
        startActivity(intent)
        return true;
    }
    return super.onOptionsItemSelected(item);
}

navigateUpFromSameTask の挙動は「親のアクティビティに遷移する」だと思っていたのですが、そうでないケースがあるようです。

そこで質問なのですが、親のアクティビティに遷移したい場合、

  • 上記の startAcitivity を利用した方法で問題がないか
  • なぜ navigateUpFromSameTask が期待通りに動かないか

を知りたいです。