次のように、ナビゲーション中にフラグメントが置き換えられる FrameLayout を使用したアクティビティがあります。
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
// ...
// fragMap is a HashMap<String,Class<?>> mapping fragments classes
Fragment frag;
Class<?> classa = fragMap.get(s);
frag = (Fragment) classa.newInstance();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right ,R.anim.slide_in_right, R.anim.slide_out_left);
ft.addToBackStack(null);
ft.replace(R.id.fragcontainer, frag);
ft.commit();
戻るボタンを押すと、リバース トランザクションが開始され、すべて問題ないように見えます。
アクティビティが作成されると、最初のフラグメント A が読み込まれ、メモリ使用量は ~20mb です。次に、A を B に置き換え、B を C に置き換えると、メモリは ~40mb に増加します。
フラグメント A が表示されるまで [戻る] ボタンを押すと、メモリ使用量が (アクティビティの場合と同様に) ~20mb に戻ると予想されますが、それでも ~40mb のままです。B と C を再度ナビゲートしても、変化せず、それでも 40 MB 程度です。
私は本当にこの動作を理解していません.フラグメントがリークしていた場合、AからB、Cに移動するたびにメモリを上げるべきではありませんか?
また、次の方法でバックスタックをクリアしようとしました:
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
しかし、何も変わりません。onDestroy
また、戻るときに各フラグメントで呼び出されることを確認し、呼び出されています。
誰かがこれを理解するのを手伝ってくれませんか? 間違ったパターンを使用していますか?