これらのオプションを使用して、アプリに StrictMode を実装しました。
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectNetwork()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectActivityLeaks()
.penaltyLog()
.penaltyDeath()
.build());
アプリケーションには 2 つのアクティビティ (A と B) があり、シナリオは次のとおりです。
- アクティビティAのonCreateメソッドにStrictModeを実装
- BアクティビティはAから開始されます
- B 活動が終了し、活動 A に戻る
- BアクティビティはAから開始されます
- B アクティビティが終了し、A アクティビティが StrictMode によって強制終了されます (penaltyDeath)
アクティビティ A が強制終了されると、次のメッセージが表示されます。
クラス AActivity; インスタンス = 2; limit=1 android.os.StrictMode$InstanceCountViolation: クラス AActivity; インスタンス = 2; android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1) で limit=1
アクティビティ B は、カスタム ボタンを介して開始されます (B アクティビティと同じように、空のコンストラクターのみがあります)。StrictMode でクラス インスタンスの制限を設定しようとしましたが、結果はありませんでした。興味深いことに、penallyDeath() オプションがないと、アクティビティ インスタンスの数が 15 ~ 17 まで増加し、その後 GC が発生します。
誰かが StrictMode で同様の問題を抱えていますか?