由于 IMAP 本身确实提供任何类型的推送通知,而Google 扩展也不提供,因此您必须自己实现它。
一种方法是使用IDLE
请求,这仍然是一种廉价的轮询方式。当然,您不能期望您的应用程序一直在运行,因此您需要使用后台服务。然而,“永远在线”服务在 Android 上是一种反模式,它会很快耗尽电池电量,并可能让您获得许多 1 星。此外,系统可能随时决定终止它。另一种选择是使用AlarmManager
定期启动服务,但每隔几秒左右启动它同样糟糕。所以你基本上回到了第一点:轮询。
另一种方法是使用 GCM 或类似服务获取推送通知。这确实需要您拥有一个服务器,并且该服务器需要为用户提供身份验证信息(这可能是一个问题),但是在保持打开的连接和每秒发送 IDLE 等方面没有真正的限制。在 Android 上侧面,如果你想自己实现推送,你需要保持一个打开的套接字来获取通知。如果您不是系统应用程序(见上文),这不是很容易做到,所以离开 GCM。它使用的连接由系统(谷歌服务框架)管理,它可以做普通应用程序不能做的事情,而且你基本上可以免费获得它,因为它已经在那里了。当有事情要做时,它会接收小块数据,称为“tickles”。这些反过来又会触发广播、Google Play 更新等。
所以,任君挑选。或者干脆放弃,注册帐户并使用 GMail 及其标签Android API。