0

私のアプリはビデオを録画し、TextToSpeech ->android.speech.tts.TextToSpeech を使用します。() を同時に話します。

1.5 GHz の 4 プロセッサなどの高デバイスで実行すると、問題なく動作します。しかし、2 プロセッサ 1.1 GHz デバイスで使用すると、UI スレッドが非常に遅くなり、2 ~ 6 秒フリーズします。

問題が TextToSpeech にあることはわかっています。これを使用せずにビデオを録画すると、UI スレッドが低デバイスで非常にスムーズに動作するためです。TextToSpeech + 録画ビデオを使用すると、UI スレッドが機能せず、1 ~ 2 セグメントの音声がフリーズします。

TextToSpeech.speak() のパフォーマンスを向上させる方法はありますか?

4

2 に答える 2

0

「プロセッサ」と言うときに「コア」について言及している場合はどうなりますか? 3 つの異なるスレッドで実行する必要があるアクティビティを実行しているようです。

メインスレッドは常にフリーでなければなりません。行き詰まらないようにしてください...これまでに!

AsyncTask クラスを拡張します。AsyncTask を使用すると、メイン スレッドをブロックすることなく、ある程度の時間がかかる処理を実行できます。

これはすべて仮想マシン (正確には Dalvik) 上で実行されるため、スレッドも仮想であると想定する必要があります。これは、2 つのコアで 3 つのスレッドを実行する場合、仮想マシンがプロセッサ サイクルを取得するスレッドを決定し、場合によってはコアを共有することを意味します。

ローエンドのデバイスで一度に 2 つの重い処理を行うことのみを計画している場合は、ビデオ用のメイン スレッドとTextToSpeech. これは、メイン スレッドをブロックする可能性があるため、理想的ではありません。しかし、ビデオは 2 つの中でより滑らかであるため、メイン UI スレッドで実行するための最初の候補となります。

理想的には、少なくとも 3 つのスレッドが必要であり、メインの UI スレッドは主にブロックされないようにします。両方のスレッドからの結果をポーリングして、完了を検出できます。

たまたま 4 つのコアがある場合、3 つのスレッドを作成すると、使用可能なコアよりも分散されたパフォーマンスが得られる可能性があります。

始めるためのドキュメント: Android Multithreading - a Qualcomm articleおよび Android: AsyncTask

于 2015-12-17T21:49:56.270 に答える