我们刚刚开始为 Android 构建自己的推送通知系统(由于客户的要求),并找到了 Eclipse Paho ( http://www.eclipse.org/paho/ )。不用说,这个项目真的很令人兴奋。
Android 的问题是,如果 CPU 处于睡眠状态,MQTT 客户端可能无法在其设置的时间间隔内发送 ping。解决方法是使用 AlarmManager 将其唤醒并完成工作。Android 文档说:
只要警报接收器的 onReceive() 方法正在执行,警报管理器就会持有 CPU 唤醒锁。这保证了在您完成广播处理之前手机不会休眠。一旦 onReceive() 返回,警报管理器就会释放这个唤醒锁。这意味着在某些情况下,一旦您的 onReceive() 方法完成,手机就会进入睡眠状态。
http://developer.android.com/reference/android/app/AlarmManager.html
我需要确保当 CPU 具有 PARTIAL_WAKE_LOCK 时我可以在 onReceive() 方法中发送 ping 命令,因此我正在寻找一种手动向服务器发送 ping 的方法,但似乎客户端没有公开任何此类方法。我错过了什么吗?或者,除了发布我自己的“ping 消息”之外,这里的解决方法是什么?我想避免这种情况,因为:
- 更大的开销
- 我们将确保 Android 客户端仅为订阅者,可能使用 Mosquitto 的 ACL。他们将不被允许发布消息。