データグラム パケットを受信してそのパケット (オーディオ パケット) を再生する Android アプリケーションを作成しようとしています。
音声が途切れないように、この目的のためにサービスを使用したいと考えています。このために、次のようなサービスがあります。
public class MyService extends Service {
...
AudioTrack track;
DatagramSocket sock;
DatagramPacket pack;
...
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
...
track = new AudioTrack(...)
track.play();
sock = new DatagramSocket(AUDIO_PORT);
pack = new DatagramPacket(...)
...
}
@Override
public void onStart(Intent intent, int startid) {
...
while(true)
{
try {
sock.receive(pack);
} catch (IOException e) {
e.printStackTrace();
}
track.write(pack.getData(), 0, pack.getLength());
}
}
}
私の主な活動には、「START」ボタンがあり、押すと実行されます。
startService(new Intent(this, MyService.class));
アプリは正常に動作し、受信したオーディオを適切に再生しますが、開始ボタンを押した後:
他のボタンには反応しません
しばらくすると、「アプリケーション MyAppName が応答していません」というメッセージが表示され、2 つのオプション
Forceclose
とWait
. 私が押すWait
と、オーディオはうまく再生され続けますが、UI は応答しなくなりました。
私には、 を入れることがこれを引き起こしwhile(true)
たように見えます。onStart
これを正しい方法で行うための助けと指針をいただければ幸いです。