ユーザーがあるフラグメントから別のフラグメントに進むことができるアクティビティがあります。フラグメントが開始し、いくつかのデータをダウンロードして表示します (リソースからいくつかのアイコンを描画するなど)。ユーザーは好きなだけ (飽きるまで?) フラグメントを進めていくことができます。
問題は、最終的に OutOfMemoryError が発生することです (32 MB の VM ヒープで約 90 個のフラグメントが発生した後)。90 はかなり多いように見えますが、現場でそのようなメモリ エラー レポートを見たことがあるので、おそらくこれはローエンド デバイスでより早く発生します。onCreateView で作成したビューはすべて、onDestroyView で無効にするようにしました。私のフラグメントが保持する唯一の他のオブジェクト (私が知る限り) は、最初にダウンロードするデータで、通常はわずか 10 ~ 50kb です。
私の最初の質問は、これは正常ですか? バックスタックに最大 90 個のフラグメントしか持てないと期待できますか? それとも、私が何かできるメモリリークがどこかにありますか?
ユーザーがアプリから離れ、Android がプロセス全体を強制終了してメモリを解放することを決定した場合、ユーザーが戻ると、状態全体がバンドルから復元されているため、使用されるメモリははるかに少なくなります。その後、ユーザーがバック スタックをバックプレスすると、もちろん、各フラグメントは保存されたインスタンス状態から作成/再開されます。
私の2番目の質問は、これを強制的に発生させる方法はありますか? つまり、「バック スタックに 50 個を超えるフラグメントがある場合は、一番下にあるフラグメントの削除を始めて、savedInstanceState に移動しますか?」