2016-06-24 5 views
0

私の活動は、コンテキストを必要とするアダプタを使用していますAndroidAnnotations対応のアダプタでアクティビティコンテキストの代わりにアプリケーションを渡す方法はありますか?

@EActivity 
public class MyActivity extends Activity { 

    @Bean 
    MyAdapter adapter; 

} 

自体にアダプター:

@EBean 
public class MyAdapter extends Adapter { 

    @RootContext 
    Context context; 

} 

WHN私は生成されたアクティビティを開くには、私は以下を参照してください。

adapter = MyAdapter_.getInstance_(getActivity()); 

Activityコンテキストメモリがリークします。私はそれをアプリケーションコンテキストに変更したいと思います 私はsetterを使用してこれを行うことができましたが、何とか時間がかかるので、AndroidAnnotationsを代わりにアプリケーションコンテキストに渡すことができますか?

+0

*アクティビティコンテキストがメモリをリークする*あなたのアダプタに奇妙なことをしないでください。もしコンテキストが漏れているというよりも、Adapterはもっと長いActivity = Strange stuff ... – Selvin

+0

これは本当ですが、私はそれを調べますが、私の質問は残っています - AndroidAnnotationsを使ってアプリケーションコンテキストをアダプタに渡すにはどうすればいいですか? –

答えて

1

あなたは@RootContextでアプリContextを渡すことはできませんが、@Appとアプリケーションオブジェクトを挿入することができます

@EApplication 
public class MyApp extends Application { 
    ... 
} 
// do not forget to register MyApp_ in the manifest 

@App 
MyApp myApp; 

その後、アプリContextとしてそれを使用することができます。

+0

私の生成したアダプタには、とにかくアクティビティを受け付ける生成されたコンストラクタがあることがわかりました。そして、 '@ Background'アノテートされたメソッドは、アクティビティが強制終了されたときにバックグラウンドで実行され続けるため、リークが発生します。今、私がこのコンストラクタの上に権限を持っていれば、アクティビティそのものの代わりにWeakReference を渡してしまいましたが、私はしません:( –

+0

なぜあなたはメソッドを実行していますか? – WonderCsabo

+0

このメソッドは、DBからデータをロードしてアダプタに表示しますが、ユーザーが(たとえば、クリックがあまりにも速くクリックされてアクティビティが殺され、メソッドは実行され続けます。@ IgnoreWhenが何をしているかチェックします。ありがとうございます。 –

関連する問題