0

この Google の指示に従って、MainActivity に 5 つの大きなビットマップを表示して、メモリ リークを回避し、UI スレッドをフリーズさせないようにしています。

http://developer.android.com/training/displaying-bitmaps/process-bitmap.html

Asynctaskそのため、メソッド内の 5 つの大きなビットマップのそれぞれに対して 1 つを開始していonCreateます...

長いプロセスをそれぞれ 1 つのスレッドで実行しているため、UI スレッドをフリーズしていません (良い) が、「私の問題」は、これらの 5 つの大きなビットマップが同じ図 (顔) の一部であり、アプリが起動したときにユーザーは、異なるレイヤーが異なる時間にどのようにロードされているかを確認できます。

画像が読み込まれるまでスプラッシュ画面で考えましたが、これがそれを行うための最良の方法であるかどうか (スプラッシュが必要な場合は 1 秒未満であるため) または通知のようなより良い方法があるかどうかを知りたいです最後の画像が読み込まれたときの UI スレッドで、すべての画像が表示されます...または、すべての画像を同じように読み込もうとしますAsynctaskか?

前もって感謝します、

パオラ。

4

2 に答える 2

0

Androidの最近のバージョンでは、AsyncTaskエグゼキュータースレッドプールの前にデキューがあります。一度に実行できるタスクは1つだけです。これは、タスクが順番に行われることを意味します。これは通常、期待することです。ただし、このような場合は、5つの画像すべてを同時にロードしていないことを意味します。見て:

executeOnExecutor(Executor exec, Params... params)

...これにより、デキューをバイパスできます。それはあなたに並行性を与えるでしょう。

AsyncTasksからのネットワーク接続は私には疑わしいようです。それらの1つが失敗した場合はどうなりますか?この問題のより良い解決策は、5つのイメージすべてがダウンロードされたときにコールバックを実行する、マルチスレッドのバインドされたサービスである可能性があります。

于 2013-02-07T23:59:18.860 に答える
0

最後に、同じ非同期タスクに5つの大きなビットマップをロードしました。それらをdoInBackgroundメソッドにロードし、ASynctaskのonPostExecuteに一度にすべてを表示しました。

Siddharth Leleの答えを考えていて、そのようなものが欲しかったのですが、一方のAsynctaskをもう一方のAsynctaskのonPostExecuteから呼び出し、最後のAsynctaskを待って、doInBackgroundメソッドでそれを行うImageViewを表示するのと同じ結果が得られることを理解しました。 1つのAsynctaskのみで、すべてのビットマップがロードされるまでこのAsynctaskのpostExecuteを待機しています。必要なスレッドがないため、より効率的だと思います...

このアプローチで他に考慮事項があるかどうか教えてください。

ありがとう!

于 2013-02-07T23:02:03.410 に答える