6

私はAndroid用のプログラミングを読んでいますが、本には次のように書かれています:

以前に作成されたフラグメントにまだ関連付けられている間に、アクティビティ onCreate が呼び出される可能性は十分にあります。onCreate メソッドが呼び出されるたびに新しいフラグメントを追加するだけで、フラグメントがリークします。これを防ぐために、コード例ではフラグメント マネージャーのタグ付け機能とロケーション機能を利用しています。

コードは次のとおりです。

super.onCreate( state); 
setContentView( R.layout.main); 
FragmentManager fragMgr = getFragmentManager(); 
FragmentTransaction xact = fragMgr.beginTransaction(); 
if (null = = fragMgr.findFragmentByTag( FRAG1_TAG)) { 
   xact.add( R.id.date_time, new DateTime(), FRAG1_TAG); 
} 
xact.commit();

onCreateでこれが必要な理由を誰かが説明できますか?

フラグメントのライフサイクルは常にアクティビティのライフサイクルに依存し、アクティビティの onCreate はアクティビティが作成されるときに常に呼び出される (つまり、常に死んでいる) と考えていました。

フラグメントのライフサイクルがアクティビティに結び付けられている場合、アクティビティが終了するとすべてのフラグメントが終了するので、アクティビティで onCreate が呼び出されるとフラグメントは常に null になるのではないでしょうか?

例外はありますか、または誰かが私の考えが正しくない理由を説明できますか (実際には正しくないと思いますが、理由がわかりませんか?)

4

1 に答える 1

3

フラグメントは で破壊されますActivityが、FragmentManagerを完全に終了しない限り、 はそれらを記憶しますActivityActivity構成の変更により が強制終了され、再作成された場合FragmentManager、以前にコミットされたフラグメントを復元する必要があります。Fragmentそのため、 がまだ にないかどうかを確認しますFragmentManager。そこにある場合、トランザクションを中止すると、2 つのフラグメント (作成したばかりの新しいフラグメントと、FragmentManager記憶されて復元される古いフラグメント) が作成されます。

于 2013-08-01T13:40:25.240 に答える