我有一个应用程序需要“轮询”网络服务以查看用户是否有任何新消息在等待。我无法控制网络服务,所以我无法切换到“推送”机制,我被困在每 X 秒发出一个请求以查看可用的内容。
我经常使用 System.Threading.Timer 发出请求,但遇到了一些问题。最大的问题是当手机进入“待机”模式时它会停止运行(屏幕关闭,但仍然能够接听电话和电子邮件/txt 通知)。
我真的希望它表现得像其他后台应用程序一样。我该怎么做才能让它在不消耗太多电池电量的情况下工作?
我有一个应用程序需要“轮询”网络服务以查看用户是否有任何新消息在等待。我无法控制网络服务,所以我无法切换到“推送”机制,我被困在每 X 秒发出一个请求以查看可用的内容。
我经常使用 System.Threading.Timer 发出请求,但遇到了一些问题。最大的问题是当手机进入“待机”模式时它会停止运行(屏幕关闭,但仍然能够接听电话和电子邮件/txt 通知)。
我真的希望它表现得像其他后台应用程序一样。我该怎么做才能让它在不消耗太多电池电量的情况下工作?
讨厌回答我自己的问题,但有人指出了这一点,即使设备处于睡眠状态,它也能够执行。看起来它工作得很好。
你无能为力,AFAIK。待机模式旨在暂停处理器以节省电力,如果处理器没有运行,您的代码将无法执行。您的应用程序可以做一些事情来防止设备进入待机模式,但这根本不值得推荐。
是的。与MusiGenesis 的回答类似,如果不保持设备正常运行,您将无法做很多事情。类似于某些手机会通知“游戏/应用程序正在运行”,因此您的电池正在被拍打。
从您的手机编写一个界面以利用短信(仍然有效)并让它向网络服务发送短信怎么样?那可能吗?我猜这种方法也可能停止运行,但我认为这是一个想法?
我不确定紧凑的框架,但在 Win32 中有 WaitableTimer 可以将计算机从待机状态唤醒。虽然.Net 中没有包装器,但它需要一些本机调用。
尽管您无法修改 Web 服务,但您可以在客户端和原始 Web 服务之间添加第二个“影子”Web 服务。影子 web 服务可以轮询原始 web 服务,然后将它发现的任何内容“推送”到 PDA。
不过,我想你可能仍然有同样的问题。我从来没有从 web 服务“推送”过,但我认为它基本上是通过让客户端对 web 服务方法进行初始调用来实现的,该方法将委托给客户端中的方法,然后 web 服务会挂起。当 web 服务需要推送某些东西时,它会调用该委托。如果客户端同时进入待机模式,从服务器调用委托的尝试将失败。