java安卓服务代替线程
我正在编写一个应用程序,其中我需要在两个Activities
之间共享一个任务,此任务应该从连接的主机接收数据,并在消息可用时更新活动。
到目前为止,我是通过Thread
在Activity
上的一个Thread
来完成这项工作的,它工作得很好。
现在我需要添加更多需要相同数据的活动,但我希望避免重复代码,并且我希望以更结构化的方式做一些事情。
我开始阅读服务指南here,但我感到困惑。在我最初的想法中,我认为我需要一个绑定服务,但在阅读了一些内容后,我又重新打开了一个启动的服务。
原始线程服务结构如下所示:
private class TelemetryReceiverThread extends Thread {
private static final int MAX_UDP_DATAGRAM_LEN = 1500;
private static final int UDP_SERVER_RESPAWN = 2000;
private final int UDP_SERVER_PORT;
private boolean keepRunning = true;
private boolean paused = false;
public TelemetryReceiverThread(int listen_port) {
UDP_SERVER_PORT = listen_port;
}
public void run() {
final byte[] buffer = new byte[MAX_UDP_DATAGRAM_LEN];
final DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
DatagramSocket socket = null;
do {
try {
Thread.sleep(UDP_SERVER_RESPAWN);
socket = new DatagramSocket(null);
socket.setReuseAddress(true);
socket.bind(new InetSocketAddress(UDP_SERVER_PORT));
while (keepRunning) {
socket.receive(packet);
final String message = new String(buffer, 0, packet.getLength());
if (!paused)
telemetryTask(message);
}
socket.close();
} catch (Throwable e) {
Log.e(getClass().getName(), Objects.requireNonNull(e.getMessage()));
e.printStackTrace();
}
} while (keepRunning);
if (socket != null) {
socket.close();
}
}
void play() {
paused = false;
}
void pause() {
paused = true;
}
void kill() {
keepRunning = false;
}
}
telemetryTask
方法是一种对消息进行解码并更新UI的活动方法
切换到Service
结构时,我希望将收集的消息发送到Activity
槽Intent
,并通过BroadCastReceiver
收集它。对吧?
指南中提供的示例让我感到困惑,而且我还没有找到一个更清晰的示例,其中一个Service
包含一个Thread
来进行异步操作。有人能帮我提供一个更具体(希望更清晰)的参考资料吗
一个更一般的问题:我的方法正确吗?有一种更符合安卓标准的方法来做我需要的事情吗
共 (0) 个答案