android - 下载线程中的 PARTIAL_WAKE_LOCK 与 SCREEN_DIM_WAKE_LOCK

标签 android multithreading service download wakelock

我有一个服务生成一个下载线程,有时会下载大文件。我意识到一旦手机进入休眠状态,下载线程就会明显变慢,然后停止。

明显的补救措施,唤醒锁。所以我认为获取 partial_wake_lock 是可以的,只是为了保持 cpu 处理下载。但这不起作用,同样的行为,下载速度变慢,然后在屏幕关闭时停止。

然后我尝试了 screen_dim_wake_lock。这一次,屏幕一直亮着(变暗),下载一直全速进行,直到完成,唤醒锁被释放,然后手机进入休眠状态。

我的问题是,为什么我不能像在 screen_dim_wake_lock 期间那样在持有 partial_wake_lock 时保持我的线程运行?关于这两者之间的区别是否有一些未记录的行为?可能是因为我没有在 UI 线程上运行吗?

编辑:

我添加了一个 wifilock。 wifi 没有进入休眠状态,但我的线程仍然死机。如果其他进程唤醒系统,下载将以正常速度继续,然后再次减慢。如果我唤醒手机,它会继续以正常速度运行,然后在屏幕熄灭时再次减速。好像线程被系统推到了后台。我想知道我是否可以阻止这种情况。

最佳答案

我和你有同样的问题,有一项服务不断下载大量数据 网址。最好的方法是像您一样使用 screen_dim_wake_lock 并将您的服务带到 前景,如所述here .

通过这种方式,屏幕始终处于打开状态,因此您的 WI-FI 接口(interface)也会发生同样的情况。相反,如果您让手机闲置一段时间,则屏幕会关闭,手机会进入休眠模式,WIFI 也会在 15 分钟后关闭!

因此,另一种方法是使用 partial_wake_lock(仅 CPU 开启)并更改手机设置,以便 WIFI 始终开启(也许这看起来像您获得的 WIFI_LOCK..):

  • 从主屏幕转到系统或设置,然后
  • 选择无线和网络
  • 选择 WI-FI 设置
  • 按菜单并选择高级
  • 按 Wi-Fi sleep 策略并将其更改为从不

那么即使在屏幕关闭的 sleep 模式下,您的服务也能正常工作。这里唯一的问题是:

如果您暂时失去 WIFI 连接,那么 Android 可能会终止您的服务,因为它将处于非 Activity 状态。但如果您的手机始终连接到 WIFI 网络且稳定性良好,那么一切都会正常工作!

关于android - 下载线程中的 PARTIAL_WAKE_LOCK 与 SCREEN_DIM_WAKE_LOCK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5183859/

相关文章:

android - 手动删除数据库时如何强制内容提供者重置

java - 更新到 Android 4.4 KitKat 后无法找到 Movies 文件夹

android - 扩展 HelloGallery 教程。单击图像并将图像传递给另一个 Activity/页面

c++ - webrtc native 应用程序中的每个对等点是否需要单独的 rtc::Runnable 线程和 PeerConnectionFactory 对象?

python - 在进度条的计算中实现python多线程

ruby - 使用 watir-webdriver 打开多个线程导致 'Connection refused' 错误

Android - 多项服务未按预期运行

service - 卸载服务时出现问题?

c++ - 我可以从 Windows 服务调用 system() 吗

android - 由于内存不足,我的 Eclipse IDE 不断崩溃