1

我制作了一个应用程序,每 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 服务不是问题,而是强制手机保持活动的功能。

所以,我的问题是,如果我可以使用任何其他解决方案,因为我在手机上有一些在后台运行的应用程序,但它们根本不会消耗太多电池(avast、juice defender 等)。

任何想法都非常有帮助!

问候!

4

5 回答 5

1

使用推送机制(例如Android 的 C2DM)而不是一直轮询会怎么样。

于 2012-01-05T07:47:27.607 回答
1

Google I_O 2009 - 终身编码——电池寿命

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

这将回答你的问题。

于 2012-01-05T07:58:37.400 回答
1

您必须尽快释放唤醒锁。不要使用它们。而是尝试广播接收器和 AlarmManger 做你想做的事。

于 2012-01-05T08:01:08.927 回答
1

警报管理器和 Broadcst 接收器是您的朋友。您可能还会想到,如果手机深陷裤兜,状态栏的变化有多么重要。那些 impdate 是否如此重要,即使在这种情况下也必须发生?

于 2012-01-05T08:03:46.113 回答
0

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

于 2012-01-05T08:05:16.923 回答