6

私はAndroidプロジェクトに取り組んでおり、GridViewにいくつかの画像をロードする必要があります。画像がキャッシュにある可能性があります。キャッシュがない場合は、インターネットサーバーにクエリを実行します。私の設計では、2つのスレッドを使用してロードタスクを実行します。キャッシュを読み取るための1つのスレッドと、ダウンロードするための1つのスレッド。つまり、UIを含む3つのスレッドがあります。それぞれに独自のメッセージキューがあり、ハンドラーを使用して通信します。

私の質問は、代わりにこの状況でバウンドサービスを使用する必要があるかどうかです。実際、私は上記の設計に気づきました。それは何も悪いことではないようですが、GCは非常に懸命に働いており、これはlogcatから推測できます。

もう1つの問題は、DDMSを使用してスレッドを監視すると、いくつかのスレッドが存在することです。これは、同じ読み込みメカニズムが複数のアクティビティで使用されているためです。onPause()が呼び出されている間、スレッドにメッセージループを終了させましたが、同時に生きているのは2つだけだと確信しています。しかし、私はそれらすべてをDDMSで見ることができます。(ところで、なぜスレッドがまだ存在するのですか?私はthread = nullにしました;)

つまり、私の質問は次のとおりです。この読み込みタスクは、バインドされたサービスの恩恵を受けることができますか?

4

1 に答える 1

1

では、なぜ複数のスレッドを使用しているのですか? バックグラウンドで画像を読み込み、完了したら UI に表示する必要があります。画像がどこから来るかは、UI にとってはまったく問題ではありません。また、複数のスレッドを使用しても高速になるわけではなく、より多くのメモリを消費するだけです。単一のバックグラウンド スレッドを使用するだけです。最初にキャッシュにヒットし、ヒットしない場合はダウンロードします。

サービスは、UI を必要としないことをしたい場合に使用します。UI をリアルタイムで更新する必要がある場合、サービスはあまり意味がありません。

于 2012-12-03T01:32:46.863 に答える