我正在尝试编写一个接收数据报数据包并播放该数据包(音频数据包)的 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());
}
}
}
在我的主要活动中,我有一个“开始”按钮,当按下它时它会运行:
startService(new Intent(this, MyService.class));
该应用程序运行良好并且可以很好地播放接收到的音频,但是在按下开始按钮后:
它不响应任何其他按钮
过了一会儿,我收到这条消息:“应用程序 MyAppName 没有响应”,它提供了两个选项
Forceclose
和Wait
. 如果我按Wait
audo 继续播放良好但 UI 不再响应。
对我来说,这似乎是造成这种情况while(true)
的原因。onStart
感谢以正确方式执行此操作的任何帮助和指示。