现在我想把它带到一个新的水平:应用程序应该在设备上本地存储所有数据,并定期与服务器同步,获取最近的更改并更新本地数据库.我不希望它按要求检查变化;定期更新更好,因为这允许一些很好的功能,如订阅更新.
不幸的是,服务器不符合GCM(它永远不会),它是一个很好的旧的简单Web服务器,所以我必须自己实现同步.
我找到了a comment to another question,据说基于计时器的检查是一个坏主意,因为设备必须唤醒并连接到互联网.当设备开始自己的数据同步时,捕获它会好得多,但它有一种方法来处理这个没有perioic检查?
我已经看过很多关于这个问题的讨论;他们中的大多数人讨论了ContentProvIDers,协议,GCM / C2DM等服务.我对电源效率一无所知.
那么如何正确地进行同步以便我的应用程序不会耗尽电池?
解决方法 如果您使用GCM会更好,因为服务器可以推送更新(如果可用)比轮询更省电,因为只有在有可用更新的情况下才会使用网络,这比及时轮询更好,因为它会检查并唤醒手机只是为了检查更新重要提示:截至2012年6月26日,C2DM已正式弃用.这意味着C2DM已停止接受新用户和配额请求. C2DM不会添加任何新功能.但是,使用C2DM的应用程序将继续运行.鼓励现有C2DM开发人员迁移到新版本的C2DM,称为Google Cloud Messaging for AndroID(GCM).有关更多信息,请参阅C2DM-to-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,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,// REPEAT_TIME,pending); }}
(有一个more detailed explanation that includes the necessary manifest items.)
总结以上是内存溢出为你收集整理的android – 在没有GCM的情况下,使离线数据与服务器保持同步的节能方法是什么?全部内容,希望文章能够帮你解决android – 在没有GCM的情况下,使离线数据与服务器保持同步的节能方法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)