2

すべてのバックグラウンド アクティビティをクリアするために、次のことを行いました。

私は静的配列リストを保持し、あるアクティビティから別のアクティビティに移動するたびに、新しいアクティビティの onCreate() メソッドで、現在のアクティビティのオブジェクトを次のようにそのリストに追加しました。

SomeClass.addActivity(CurrentActivity.this);

上記のステートメントを各アクティビティに追加しました。

addActivity():

public void addActivity(final Activity activity) {
            activityList.add(activity);
        }

スタックをクリアしたいときは、次のように呼び出しました。

public boolean clearStack() {
        for (Activity activity : activityList) {
            activity.finish();
        }
        activityList.clear();
        return (activityList.isEmpty());
    }

このようにして、アクティビティ スタックをクリアしました。

しかし、それはメモリリークを引き起こしました。それを行うのは正しい方法ではありません。アクティビティへの参照を保持するのはよくありません。この場合、メモリリークが発生した理由と正確な方法を説明してもらえますか?

MAT for Eclipse を使用して、アプリでこのメモリ リークを見つけました。

どんな助けでも大歓迎です。

4

2 に答える 2

0

デバイスを数回回転させてみて、何が起こるかを確認してください。GC がクリアできない以前のコンテキストへの参照をまだ保持しているため、最終的にはメモリ不足になります。

于 2012-06-01T06:45:29.627 に答える