2

1 つのプロセッサでスレッド化すると、状況が改善されるかどうか疑問に思っています。UI の実行中にデータ集約型の計算 (pcm データの fft) を実行し、スムーズに実行する必要があるアプリケーションを構築しています。

私は AsyncTask を見てきましたが、考えていました:

Optimus One でシングル コア プロセッサ (600 MHz ARM 11 プロセッサ) を実行している場合、スレッド化によって違いはありますか? スレッドを独立して実行するには、複数のプロセッサが必要になると思いましたか? または、どこかで間違っていますか?

4

2 に答える 2

6

応答性を保証するために、メイン スレッドまたは UI スレッドに UI 処理を任せることが不可欠です。これには、ゲームでの集中的な描画や 3D レンダリングは含まれません。メイン スレッドで計算負荷の高い処理を開始すると、ユーザーに遅延が発生します。典型的な例:

ボタンのクリックで、sleep(1000)。これを、ボタンのクリックでスリープ状態の AsyncTask を開始する (1000) と比較してください。

asynctask (およびその他のスレッド) により、アプリは計算と UI インタラクションを「同時に」処理できます。

同時実行がどのように機能するかについては、コンテキストの切り替えが重要です (Dan が投稿したように)。

シングル コア CPU でマルチスレッドを実行しても、パフォーマンスは向上しません。実際、コンテキストの切り替えに関連するオーバーヘッドにより、実際にはパフォーマンスが低下します。しかし、ユーザーが UI に不満を感じてアプリを閉じてしまった場合、アプリの動作速度を誰が気にしますか?

確かに、Asynctaskは行くべき道です。

于 2011-10-04T03:23:52.997 に答える
2

開発者ガイドの記事Designing for Responsiveness をご覧ください。

Android は、Linux カーネルとその他の専用ソフトウェアを使用して、Android オペレーティング システムを作成します。複数のプロセスを使用し、各プロセスには少なくとも 1 つのスレッドがあります。単一 (および複数) のプロセッサ ハードウェア プラットフォームでのマルチスレッドは、コンテキスト スイッチングによって実現されます。これにより、プロセッサごとに複数のスレッドが同時に実行されているように見えます。

于 2011-10-03T22:09:54.387 に答える