hca*_*ver 5 android text-to-speech
TextToSpeech构造函数看起来像是由Activity"拥有".我正在制作一个包含多个不同活动的应用程序,我不想为每个活动初始化一个新的TextToSpeech实例 - 我希望即使活动正在改变,语音也能顺利进行.
我的想法是让所有活动访问一个静态TextToSpeech对象,由第一个对象初始化.
感谢那些告诉我传递 ApplicationContext 的人。事实证明,这很容易...难的是 TextToSpeech 对象是否保证线程安全。
感谢您的回答告诉我如何使某些东西成为线程安全的/假设它是线程安全的,但问题是该对象是否已经是线程安全的。我可能应该说,我可以很好地实现线程安全,但我想知道我是否需要打扰。我不想在不确定的情况下假设线程安全。
我运行了以下命令,它似乎有效。因此,我假设 Android SDK TTS 是线程安全的,但找不到任何文档说明在所有设备上假设这一点都是安全的,所以我将暂时包装我的 TTS 实例!
package com.example.testproject;
import java.util.Random;
import android.os.Bundle;
import android.app.Activity;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
public class TestActivity extends Activity implements OnInitListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tts = new TextToSpeech(getApplicationContext(), this);
}
TextToSpeech tts = null;
@Override
public void onInit(int arg0) {
for (int i = 0; i < 100; ++i) {
class Irritate implements Runnable {
Irritate(int iIn) {
i = iIn;
}
@Override
public void run() {
Random r = new Random();
try {
Thread.sleep(r.nextInt(2000));
} catch (InterruptedException e) {
e.printStackTrace();
}
tts.speak(Integer.toString(i), TextToSpeech.QUEUE_ADD, null);
}
int i;
}
Thread t = new Thread(new Irritate(i));
t.start();
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2735 次 |
最近记录: |