如果您使用 GCM 会更好,因为服务器可以推送更新(如果可用),这比轮询更节能,因为只有在更新可用时才会使用网络,它比及时轮询要好得多,因为它会检查并唤醒手机只是为了检查更新
重要提示:C2DM 已于 2012 年 6 月 26 日正式弃用。这意味着 C2DM 已停止接受新用户和配额请求。不会向 C2DM 添加任何新功能。但是,使用 C2DM 的应用程序将继续工作。鼓励现有 C2DM 开发人员迁移到新版本的 C2DM,称为 Android 版 Google Cloud Messaging (GCM)。有关更多信息,请参阅 C2DM 到 GCM 迁移文档。开发人员必须使用 GCM 进行新的开发。
但是由于您无法使用 GCM,您将不得不自行进行轮询,您可以通过使用警报管理器和不精确的重复以一种省电的方式使用它
我认为这是定期轮询的最佳节能方式
给出示例代码
public class MyScheduleReceiver extends BroadcastReceiver {
// Restart service every 30 sec
private static final long REPEAT_TIME = 1000 * 30 ;
@Override
public void onReceive(Context context, Intent intent) {
AlarmManager service = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, MyStartServiceReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,
PendingIntent.FLAG_CANCEL_CURRENT);
Calendar cal = Calendar.getInstance();
// Start 30 seconds after boot completed
cal.add(Calendar.SECOND, 30);
//
// Fetch every 30 seconds
// InexactRepeating allows Android to optimize the energy consumption
service.setInexactRepeating(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), REPEAT_TIME, pending);
// service.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
// REPEAT_TIME, pending);
}
}
(有更详细的解释,包括必要的清单项目。)