2016-06-25 9 views
1

私のアプリでは、いくつかのダイアログをデバッグとして表示する必要があります。 静的メソッドを使用して静的クラスからダイアログを実際に呼び出して表示する方が簡単なように、アプリケーション自体の構造が記述されています。これらのメソッドはすべて、最終的に要求を処理するより大きなメソッドを指しています。現在のアクティビティの有効な参照を保持する

私が達成したいのは、現在のアクティビティへの参照が必要な最終的なDialog(私はgithubのafollestadによるMaterial Dialogライブラリを使用しています)を呼び出すことです。

私は実際には、クラス内にprivate static Activity sActivity;フィールドを持ち、相対setActivity(Activity activity)メソッドを持っています。この

try { 
    Utils.showSimpleDialog(sActivity, "Error", message); 
} catch (MaterialDialog.DialogException d) { 
    d.printStackTrace(); 
} 

は常にキャッチケースを呼び出しているので、意図したとおりに動作しない

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { 
     @Override 
     public void onActivityCreated(Activity activity, Bundle savedInstanceState) { 

      MyStaticClass.setActivity(activity); 
     } 
     [...] 
} 

現在、私はこれを呼び出して、そこから自分のCustomApplicationを持っています。

私の質問は、すべてのアクティビティからsetActivityコールを避けることができますか?はいの場合、どうですか?少し早いですがお礼を!

答えて

3

リークしたコンテキストでメモリリークを引き起こす可能性があるため、アクティビティへの静的な参照を保持することはお勧めできません。 onDestroyでnullに設定

編集onDestroyでnullに静的な活動を設定した場合、以前のコメントで尋ねたとして、それはまだ危険であるならば、この答えの下に答えるために は、常にこの回避策として機能していないので、もしメモリが足りなくなり、AndroidがライフサイクルのonPauseステージで実際に停止し、onDestroyにヒットしない状態になることがあります。静的コンテキストを保持することは一般的に避けなければならない。


showSimpleDialogがすでに活動パラメータを取るように見えます。アクティビティから呼び出すときは、単にthisを渡すか、フラグメントからgetActivity()を渡します。 showSimpleDialogへの呼び出しが、実装した別のユーティリティメソッドから呼び出された場合、そのクラスに静的アクティビティを設定するのではなく、そのメソッドにアクティビティを渡すだけです。

関連する問題