TTS エンジンをブロードキャスト エンジンと一緒に使用しようとしています。
マイ アクティビティはA
で、ブロードキャスト レシーバはB
です。新しいメッセージがあるときはいつでもアクティビティを有効にA
しています。別のメッセージがあるときは、古いものは破棄され、新しい A が作成されますが、トップ インスタンスをクリアしているため、" " を使用してstart アクティビティA
を再度呼び出します。 TTSエンジンも古いものと一緒に破壊されます。助けてくださいB
Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP
A
A
public class SMSPopup extends Activity implements OnClickListener,
TextToSpeech.OnInitListener {
String smsMessageId = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
displayPopupSMS();
mTts = new TextToSpeech(this, this);
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = mTts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
return;
}
if (!readMessageText.contains("null")) {
Log.i("SMS Message", "Call from init" + readMessageText);
readSMS();
}
}
}
private void readSMS() {
mTts.speak(readMessageText, TextToSpeech.QUEUE_FLUSH, null);
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mTts!=null){
mTts.shutdown();
}
}
}
機能している TTS をシャットダウンしていない場合onDestroy()
、TTS サービスがリークしています。