有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java安卓服务代替线程

我正在编写一个应用程序,其中我需要在两个Activities之间共享一个任务,此任务应该从连接的主机接收数据,并在消息可用时更新活动。 到目前为止,我是通过ThreadActivity上的一个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结构时,我希望将收集的消息发送到ActivityIntent,并通过BroadCastReceiver收集它。对吧?

指南中提供的示例让我感到困惑,而且我还没有找到一个更清晰的示例,其中一个Service包含一个Thread来进行异步操作。有人能帮我提供一个更具体(希望更清晰)的参考资料吗

一个更一般的问题:我的方法正确吗?有一种更符合安卓标准的方法来做我需要的事情吗


共 (0) 个答案