4

コードは複雑すぎてここにすべてを掲載することはできませんが、基本的なスキーマは次のとおりです。2 つのActivityサブクラスがあり、それぞれがListView. それぞれに、カスタム クラスのインスタンスもListView生成するカスタム クラスのアダプターがあります。Viewこれらのリストは、別のスレッドで非同期に生成されたデータ項目を示しています。更新の送信先を知る必要があるため、操作するデータ オブジェクトにはWeakReference<>初期化時に内容を表示するアダプターへの参照を保持するように設定されているオブジェクト。最初のアクティビティのリスト内のオブジェクトが選択されると、アイテムを検索してその内容を表示するように指示するインテントで 2 番目のアクティビティを開始します。次に、「戻る」ボタンを使用して 2 番目のアクティビティを閉じ、最初のアクティビティに戻ります。何らかの理由で、チェックを有効にしてこれを実行すると、2 つのアクティビティの切り替えを数回繰り返した後、クラスStrictModeの 1 つのインスタンスが多すぎると不平を言って、常にクラッシュします。Activity

クラッシュの直前にヒープ ダンプが書き込まれるようにしました ( Android StrictMode とヒープ ダンプを参照)。これらのヒープ ダンプは、終了時にヒープ上に 2 つのアクティビティのそれぞれのインスタンスが 1 つあることを常に示しています。まず第一に、私が最近 2 つを切り替えたときに、これは予期されていないことですか? そうであれば、なぜStrictModeこれについて不平を言っているのですか? 予期されていない場合、これを回避するにはどうすればよいですか? ヒープ ダンプを調べると、両方のオブジェクトがメイン スレッド スタックから参照されています。それぞれに からの参照もありandroid.app.ActivityThread$ActivityClientRecord、これも制御できないようです。

では、基本的に、この状況を回避する方法はありますか? これは実際にアクティビティ リークを表しているのでしょうか、それとも StrictMode が過度に機密性が高いだけなのでしょうか?

4

1 に答える 1