Android:在背景电池中运行的应用程序

时间:2012-01-05 07:41:59

标签: android service background battery powermanager

我制作了一个应用程序,每隔5-10分钟连接一次我的服务器,检查数据库是否有变化。

所以我使用服务,以便应用程序可以在后台运行,用户可以关闭应用程序并在状态栏中获取消息。在它里面我使用Thread让应用程序睡眠5-10分钟。当我锁定手机时问题就开始了。比应用程序只是停止(这是因为当你锁定你的手机进入“睡眠”),所以我发现我需要这个:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 'My Tag');      
wl.acquire();

除了屏幕外,强迫手机不要睡觉。但是我卡住了。这样可以正常工作,但可以将电池耗尽。每小时10%:(而且我相信应用程序必须让这些Web服务请求所有的时间,但这个功能迫使手机活着。

所以,我的问题是,如果有任何其他解决方案我可以使用,因为我在backgorund运行的手机上有一些应用程序,但他们根本没有耗尽电池(avast,果汁防御者等等)。 )。

任何想法都非常有用!

问候!

5 个答案:

答案 0 :(得分:1)

如何使用推送机制(例如C2DM for Android)而不是一直轮询。

答案 1 :(得分:1)

Google I_O 2009 - 为生命编码 - 电池寿命,即

http://www.youtube.com/watch?v=OUemfrKe65c

这将回答你的问题。

答案 2 :(得分:1)

你必须尽快释放唤醒锁。不要使用它们。而是尝试使用Broadcast receiver和AlarmManger来做你想做的事。

答案 3 :(得分:1)

闹钟管理器和Broadcst接收器是你的朋友。而且你也可以考虑一下,如果电话的状态变化有多么重要,那么电话就会深深地陷入困境中。那么重要的是,即使在这种情况下它也必须发生吗?

答案 4 :(得分:0)

你可以设置一个带有RTC标志的AlarmManager,每5分钟启动一次服务(也许是IntentService更好),在服务获取唤醒锁的同时进行网络操作,并在你完成后立即停止服务。