如何在 15 秒后从服务中启动处理程序以防止应用程序睡眠并将位置发送到 Web 服务?

Posted

技术标签:

【中文标题】如何在 15 秒后从服务中启动处理程序以防止应用程序睡眠并将位置发送到 Web 服务?【英文标题】:how to start a handler from service after 15 second to prevent app from sleep and send location to webservice? 【发布时间】:2019-03-13 03:47:26 【问题描述】:

我正在开发 GPS 跟踪应用程序,我需要在 15 秒后跟踪位置。我已经使用处理程序从服务类的 onStartCommand() 启动服务。但 15 秒后或一段时间后,处理程序并不总是执行。我还使用 WakeLock 来防止应用程序休眠。如何解决这个问题?

【问题讨论】:

Using Handler inside service的可能重复 【参考方案1】:

简而言之:

new Handler().postDelayed(() ->  ... , 15000);

动作(此处为 lambda)将在超时(15,000 毫秒)后执行。

展开后可能是这样的:

new Handler().postDelayed(new Runnable() 
    @Override
    public void run() 
        //Track my location
    
, 15_000);

【讨论】:

我已经这样做了,但它并不总是在 15 秒后执行 在什么平台上 - 这可能是打瞌睡模式吗? 在安卓平台【参考方案2】:

如下所示,使用Timer 而不是Handler

new java.util.Timer().schedule(new java.util.TimerTask() 
            @Override
            public void run() 
                //do your task here
            
        , 15000);

【讨论】:

究竟为什么这是一个糟糕的建议:***.com/a/40339630/984830

以上是关于如何在 15 秒后从服务中启动处理程序以防止应用程序睡眠并将位置发送到 Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中 x 秒后从 UIButton 更改 UIImage

如果Java应用程序不在预定义的目录中,如何防止(以编程方式)启动它? [复制]

如何防止系统在 Win32 服务中关闭或重新启动?

Android如何以编程方式隐藏启动器图标

当我在 Safari 中将应用程序切换到 Facebook 时,防止 IOS 重新启动应用程序

如何防止应用程序在黑莓中启动