【发布时间】:2014-08-24 22:02:31
【问题描述】:
我需要不断地从 Android 应用程序广播 UDP 数据包,因此我创建了一个派生自 TimerTask 的类。当我尝试从 TimerTask 中更新 UI 元素时,应用程序崩溃了,这告诉我它在单独的线程上运行。
但是,当我尝试发送 UDP 数据包时,应用程序由于 NetworkOnMainThreadException 而崩溃。
// simplified
public class UdpDiscoveryTask extends TimerTask {
private final DatagramSocket _socket;
public UdpDiscoverytAsk() {
_socket = new DatagramSocket(PORT);
}
@Override
public void run() {
DatagramPacket packet = new DatagramPacket("Hello".getBytes().....);
_socket.send(packet);
}
}
【问题讨论】:
-
TimerTask通常在后台线程 IIRC 上执行run()。您如何使用TimerTask?你可以发布堆栈跟踪吗?你有没有考虑切换到ScheduledExecutorService? -
发布堆栈跟踪。很可能说明不能在构造函数中构造DatagramSocket。
标签: java android multithreading networking udp