当前位置: 首页 > 知识库问答 >
问题:

从服务到服务器的具有不同时间间隔的查询

赫连正初
2023-03-14

我正在使用一个服务通过套接字将自己连接到一个服务器。我想要实现的是:我需要不断地检查手机是否连接到互联网上,如果是的话,就建立了与服务器的连接,并且可以进行查询。如果不是,插座就会关闭。我的问题就在这里:我的一些查询应该只做一次,其他的每两秒钟做一次,最后一次应该每X分钟做一次。

应该只调用一次的查询不是问题,但是我不知道如何处理另外两个。到目前为止,我在服务的onStartCommand中调用一个线程。每两秒通过定时器重复一次呼叫。这将处理第一种类型的查询,但如果我在ConnectSocket线程内部调用另一个线程来处理需要每X分钟调用一次的查询,它将不再起作用。

如果能得到任何帮助,我将不胜感激!

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        Thread thread = new Thread(new ConnectSocket());
                        thread.start();
                    }
                });
            }
        }, 0, 2000);
        return START_STICKY;
    }
class ConnectSocket implements Runnable {
        @Override
        public void run() {

            if (isConnectedToInternet()) {
                if (socket == null || socket.isClosed()) {
                    try {
                        connectToServer();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                sendMessageConnected();
                
                Thread pullThread = new Thread(new PullCowData());
                pullThread.start();

            } else {
                if (!socket.isClosed()) {
                    closeConnection();
                }
            }
        }
    }

共有1个答案

蒙墨竹
2023-03-14

我想看看WorkManager,它是专门为在Android上调度任务而设计的。

 类似资料:
  • 问题内容: 我想请一台我知道其IP的服务器将日期和时间发送给客户端。 如何用Java实现呢? 问题答案: 描述细节的文章:http : //www.informit.com/articles/article.aspx? p=26316&seqNum =3 客户端http://commons.apache.org/net/apidocs/org/apache/commons/net/ntp/NTPU

  • 我正在尝试将大量文件从服务器A传输到服务器B。我已经在A上设置了FTP(使用FileZilla)。 当我尝试从PC连接到A时,它工作正常。但当我尝试从B连接到A时,它不起作用。FTP用户登录,但目录列表命令一直处于停滞状态。 防火墙端口21已打开。我尝试了多台服务器、不同的FTP客户端,但没有用。除了FileZilla,我还尝试了内置FTP服务的ISS,得到了相同的结果。 使用相同凭据从本地完美连

  • 我必须调用RESTendpoint(使用Java)来检索响应。这些配置包括 totalTimeAvailableToCheck=15秒,NoOfAttempts=3,intervalInAttempts=3秒。 因此,假设每隔3秒就会调用一个endpoint。如果我得到了所需的响应,那么完成执行,否则,每隔3秒继续尝试,接下来的3次尝试。主线程上所有这些的总等待时间不应超过15秒。因为resten

  • 我尝试使用外部Web服务对pdf进行数字签名。此Web服务包含用户证书,用户可以使用他们的凭据和一次性密码生成的代码访问该证书。 旁注:web服务应该期望pdf摘要(哈希),但奇怪的是,它却接受整个文件。 无论如何,实现如下: pdf已成功签名,但使用Adobe Reader并检查签名字段时,似乎缺少可信时间戳,如图所示: 看起来,来自远程服务的响应是一个签名对象,我只需要将其嵌入到PDF文件中。

  • 主要内容:编写时间客户端本教程中实现的协议是TIME协议。 它与先前的示例不同,时间服务器只发送包含位整数的消息,而不接收任何请求,并在消息发送后关闭连接。 在本示例中,您将学习如何构造和发送消息,以及在完成时关闭连接。 因为时间服务器将忽略任何接收到的数据,但是一旦建立连接就发送消息,所以我们不能使用方法。而是覆盖方法。 以下是代码的实现: 下面我们来看看上面代码的一些解释分析: 如上所述,当建立连接并准备好生成流量时

  • ap.getServerTime(CALLBACK) 获取当前服务器时间的毫秒数 CALLBACK 参数说明 名称 类型 描述 time Number 服务器时间的毫秒数 代码示例 <script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.inc.min.js"></script> <b