2012-03-01 9 views
0

私はサーバーへの接続が必要なアプリケーションで作業しています。私はまた、さまざまな活動からこの接続にアクセスする必要があります。
これを達成するために、私はApplicationクラスをオーバーライドしてそこに接続を作成しようとしていました。これにより、すべてのアクティビティからの簡単なやりとりが可能になり、私自身の接続クラスにアクセスするためにgetApplicationContext().getConnection()と呼ぶことができます。アプリケーションのリソースを解放しますか?

このアプローチの問題は、Applicationクラスに接続や関連リソースを解放することができるonDestroy()メソッドなどがないことです。 onLowMemory()が呼び出されるまでアイドル状態にしておくのは、ここでは最善の方法だとは思わない。
カスタムのrelease()メソッドを呼び出すタイミングがわからないため、追加することはできません(アクティブにする最後のアクティビティは2つあります。また、ユーザーアクションによっては、他のアクティビティがあるかどうかわかりません)。アクティブなものがシャットダウンされたときに開始されます)。

リソースを解放することを無視するか(onLowMemory()より前)、私が望むものを達成するための良い方法がありますか(おそらくServiceですが、基になるクラスへの呼び出しがいくつかありますのでサービスに過度に問題が生じる可能性があります)

答えて

0

Singletonデザインパターンを使用してください。 ConnectionクラスをSingletonにすると、さまざまなアクティビティからの接続にアクセスするアプローチが得られます。マルチスレッドの処理を忘れることはありません。

+0

シングルトンを使用しないことを望んでいたのは2つの理由からです。最初に私は、コードがより洗練され、アプリケーションコンテキストでの接続でより意味をなさないと思うし、第二に、シングルトンでリソースを解放することに問題が残るためだが、シングルトンは 'onLowMemory( ) 'メソッドを呼び出します。 マルチスレッドは既にサポートされています:) – Jave

+0

"アクティブになる最後のアクティビティが2つあり、ユーザのアクションに応じて、アクティブなものがシャットダウンされたときにもう1つが起動するかどうかはわかりません" - カウントアクティビティに静的カウンタを追加し、アクティビティコールリリース()が1つだけ開いている場合は追加できます。 –

+0

はい、それも私が心に留めていたことです、それはアプリケーションかシングルトンの方法の両方で行うことができます。私はアプリケーション内の参照カウンターのようなものを検討していましたが、アクティブな参照がなくなるとタイマーを開始し、時間が過ぎてもまだアクティブな参照がない場合はリソースを解放します。 この質問は、シングルトン対アプリケーションに関するいくつかの良いディスカッションを持っています:http://stackoverflow.com/questions/3826905/singletons-vs-application-context-in-android – Jave

関連する問題