2017-04-18 10 views
4

私はアクティビティを開始するためのこの特定のテクニックを見てきました。静的なコンテキストのために私には悪い考えがあるようですが、誰かがこのアプローチの背後に正当な理由があることを望んでいました。アクティビティコンテキストを静的メソッドに渡すと、メモリリークの可能性がありますか?

起動するアクティビティは、インテント、フラグなどを設定し、最後にアクティビティを開始する静的起動(コンテキストコンテキスト)メソッドを実装します。

public static void launch(Context context){ 
    Intent i = new Intent(context, SomeOtherActivity.class); 
    // flag stuff 
    context.startActivity(i); 
} 

次に、DifferentActivityは1行でSomeOtherActivityを起動できます。

SomeOtherActivity.launch(DifferentActivity.this); 

私はそれはあなたがそれを離れて発射されDifferentActivityからセットアップまでの活動のフラグを使用できますが、それは静的メソッドにその活動のコンテキストを渡す合理化するための良い十分な理由のように見えるdoes notの方法を好みます。

これで、DifferentActivityはガベージコレクションされませんでした。なぜなら、その静的メソッドには参照があるからです。これは私にはメモリリークのように思えますが、作成されているアクティビティに含まれているフラグを保持できるようにするのは良い考えではありません。

私はここで行方不明のものがありますが、これは良い練習になりますか?

+1

いいえ 'static' * fields *は問題です。 'static'メソッドはそうではありません。 – CommonsWare

答えて

7

何かを静的関数に渡しても、メモリリークの可能性はありません。静的変数に変数を格納するには、次のようにします。この技術は完全に安全です。私がお勧めするのは、あなたが関数に変数を渡したり、それらのエクストラを使うクラス内のエクストラに格納して、その存在を知る必要のある場所の数を減らしたり、それらがどのようになっているかを知ることができるレイアウトしました

+0

さてさて、私はそれを間違って分析していたと感じました。メソッドが静的だったので、渡されたパラメータはそのコードブロックの後でさえも持続したと私は考えました。素晴らしい、ありがとう、これは心配を分離する本当に良い方法のように見える!ありがとうございました! – Le2e410

関連する問題