2
ソケット接続からの文字列を読み取るアプリケーションを作成しようとしていますが、数時間後にアプリケーションは(例外なしで)通話を停止します。文字列を送信しているサーバーが送信後に応答エコーを検出し続けるため、アプリケーションがまだ実行中であると確信しています。TextToSpeechは数時間後に動作を停止します
public class MainActivity extends AppCompatActivity {
TextToSpeech textToSpeech;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textToSpeech = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR) {
textToSpeech.setLanguage(Locale.ITALY);
}
}
});
Thread socketT = new Thread(new SocketThread());
socketT.start();
}
@Override
public void onDestroy() {
if (textToSpeech != null) {
textToSpeech.stop();
textToSpeech.shutdown();
}
super.onDestroy();
}
private class SocketThread extends Thread {
static final int socketPort = 3333;
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(socketPort);
try {
while(true) {
Socket clientSocket = serverSocket.accept();
try {
new ServerThread(clientSocket);
} catch(IOException e) {
clientSocket.close();
} }
}
catch (IOException e) {
}
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
class ServerThread extends Thread {
private int counter = 0;
private int id = ++counter;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public ServerThread(Socket s) throws IOException {
socket = s;
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
out = new PrintWriter(new BufferedWriter(osw), true);
start();
}
public void run() {
try {
while (true) {
String str = in.readLine();
textToSpeech.speak(str, TextToSpeech.QUEUE_FLUSH, null);
}
} catch (IOException e) {}
try {
socket.close();
} catch(IOException e) {}
}
}
}
}
はありがとう、私がしようとすると私はあなたが知っているだろう。 しかし、これが最初に動作してから数時間後に動作を停止する理由は説明しません。 – mike5v
これについて私は同意します。より正確な分析のために、私はAndroidのデバッグログを知る必要があります。 logcatの内容を更新できますか? – Kae10
残念ながら、問題は解決しません。 エミュレータでアプリケーションを起動すると、ttsはいつも動作し、アンドロイドボックスでは動作しなくなりますので、ログを取得できません。ログ用のアプリケーションをインストールしようとします。 – mike5v