0

ファイルのダウンロードと永続化を担当するシングルトンクラス(ダウンローダー)があるとします。クライアントがダウンロードを要求するときは、コールバックも提供する必要があります。私の質問は、それらのコールバックオブジェクトのストレージに関するものです。

コールバックインターフェイスを実装し、複数の大規模なダウンロードを要求するアクティビティがある場合、Downloaderクラスはアクティビティへの参照を無期限に保持します。ダウンロードが完了する前に、ダウンロードを要求したアクティビティがそのライフサイクルを通過し、破棄された場合はどうなりますか。

この場合、ダウンローダーはリサイクル業者がアクティビティをガベージコレクションするのを防ぎます。要求されたダウンロードが続行されてもかまいません。しかし、私がやりたいのは、提供されたコールバックが収集されるべきであることをどういうわけか検出し、それを効果的にリークしていることです。

このようなデザインパターンはありますか?Referenceサブクラスの1つが役立つだろうと思っていました。

ありがとう。

4

1 に答える 1

1

逆に行うと、それらを切断したままにして、アクティビティ参照を維持するという非常に推奨されない方法を回避できます。

すべてのシングルトンへの静的参照を保持し、タイプごとに解決する非常に単純なServiceLocatorクラスを作成しましたが、これはさらに簡単に行うことができます。必要なのは、ダウンローダーへの静的参照を保持し、その参照をアクティビティに公開するクラスです。アクティビティのいずれかにコールバックする必要がある場合は、Androidフレームワークが行うパブリッシュ/サブスクライブモデルを使用してください(つまりsetOnClickListener(OnClickListener listener))。

Downloaderには、DownloadUpdateListenerと呼ばれる内部インターフェイス、このインターフェイスの単一インスタンス、およびこれを設定してアクティビティから参照を削除するための登録および登録解除メソッドを含めることができます。アクティビティは、DownloadUpdateListenerのインスタンスをローカルに作成するため、アクティビティのすべてのフィールドとビューにアクセスできます。Downloaderで、メソッドを呼び出す前に、リスナーがnullでないことを確認してください。リスナーをonResumeに登録し、onPauseで登録を解除することを忘れないでください

于 2012-02-06T21:56:00.327 に答える