【问题标题】:How can I keep my Android service running when the screen is turned off?如何在屏幕关闭时保持我的 Android 服务运行?
【发布时间】:2015-11-26 05:20:33
【问题描述】:

当屏幕关闭时,我的应用程序服务被暂停。

我使用以下代码启动我的服务:

if (mSharedPrefs.getBoolean("prefAutoUpdatesMain", false)) {
     Intent svc = new Intent(this, MyService.class);
     startService(svc);
}

如何避免服务暂停?


我在 MyService 中要做的是从 Internet 下载一些数据。如果我了解我必须遵循的过程是:

  1. 获取唤醒锁
  2. 下载数据
  3. 释放唤醒锁

下载数据方法中没有提到wakeLock,是应用程序有wakeLock,对吗?

唤醒锁默认是引用计数的。我认为最好是没有引用计数的wakeLock,确保释放它,我错了吗?

【问题讨论】:

    标签: android service


    【解决方案1】:

    部分 WakeLock 是您想要的。即使屏幕关闭,它也会使 CPU 保持打开状态。

    获取:

    PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
    WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
    wakeLock.acquire();
    

    发布:

    wakeLock.release();
    

    WakeLock 还支持引用计数,因此您的服务中可能有多个需要唤醒功能的事物,并且设备可以在它们都不处于活动状态时进入睡眠状态。

    注意事项:

    如果您使用引用计数,请确保通过您的应用程序的所有控制路径都能正确获取/释放...finally 块在这里派上用场。

    还要确保不经常且短时间地持有 WakeLock。它们在电池使用方面相加。尽快获取您的锁,开展您的业务并释放。

    【讨论】:

      【解决方案2】:

      您需要部分唤醒锁。

      上一个问题中的详细示例:

      Wake locks android service recurring

      【讨论】:

        【解决方案3】:

        我只是在使用前台服务。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 2019-12-15
        • 1970-01-01
        相关资源
        最近更新 更多