@RomainGuyによってAvoiding memory leaksの記事を読んだ後、私の現在のAndroidアプリケーションは、アプリケーションの主なアクティビティを過ぎたという間違いに悩まされていることがわかりました。だから私はいつでも、単にその活動パラメータをActivity.getApplicationContext()と置き換えることができます。アプリケーションのアクティビティメソッドを渡すコマンドパターン?
しかし、私のアプリケーションには、アプリケーションのメインアクティビティのメンバーにしかなり得ないメソッドを実行する必要のあるクラスがあります。
したがって、この制限を回避するためにおそらくCommand Patternを使用することを考えていました。 (この時間はObject
データを装っ)
public class SomeCommandExecuableOnlyByActivity implements Command
{
public void execute(Object data)
{
doIt(((MyActivity)data).getWindow());
}
}
私が活動を中心にパスを必要とするの行き止まりに再実行しています:
問題は、我々はその一例を見れば、ということです。
この「鶏肉&卵」の状態からどうやって抜けますか?
この問題にアプローチするより良い方法はありますか?
"このアプリケーションの主な活動を周りに回す"ことは間違いだと主張する記事はありません。それを静的なデータメンバー*に入れることは間違いであり、それは記事の一番下にある最初と3番目の箇条書きの中核となる問題です。あなたがそれをなぜ使用しているかを具体的かつ正確に知っているときにのみ、「アプリケーション」を使用してください。これは、特にUI作業のための、 'Activity'のブランケット代替物ではありません。 – CommonsWare
@CommonsWareこの重要な違いを指摘してくれてありがとう。私の場合は、主なアクティビティに静的SharedPreferencesデータメンバを保持して、アプリケーション内のさまざまなモジュールに簡単にアクセスできます。ですから、主なアクティビティをパラメータとして渡すことを避けて、共有されたプリファレンスにアクセスできます: 'MainActivity.staticPrefs'。これは「*静的データメンバー*に入れる」と考えられていますか? – ih8ie8
それは良い質問です。 'SharedPreferences'はインターフェースなので、具体的な実装がどこにあるのか分かりません。わかりません。 'SharedPreferences'が' Context'を保持している場合、 'Application'を使うか、静的データメンバーを避ける必要があります。 'SharedPreferences'で' Application'がうまく動作すると思います。 – CommonsWare