【问题标题】:Android: App that runs in background drain batteryAndroid:在后台运行的应用程序耗尽电池电量
【发布时间】:2012-01-05 07:41:58
【问题描述】:

我制作了一个应用程序,每 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 等。 )。

任何想法都非常有帮助!

问候!

【问题讨论】:

    标签: android service background battery powermanager


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      Google I_O 2009 - Coding for Life -- 电池寿命

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

      这将回答您的问题。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-07-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多