我有一项服务会产生一个下载线程,该线程有时会下载大文件。我意识到一旦手机进入睡眠状态,下载线程就会显着减慢,然后停止。
显而易见的补救措施,唤醒锁。所以我认为获取partial_wake_lock 是可以的,只是为了让cpu 处理下载。但这不起作用,同样的行为,下载速度变慢,然后在屏幕关闭时停止。
然后我尝试了一个screen_dim_wake_lock。这一次,屏幕一直亮着(变暗),下载一直全速进行,直到下载完成,唤醒锁被释放,然后手机进入睡眠状态。
我的问题是,为什么我不能像在 screen_dim_wake_lock 期间那样保持 partial_wake_lock 时保持线程运行?关于这两者之间的区别是否存在一些未记录的行为?是不是因为我没有在 UI 线程上运行?
编辑:
我添加了一个wifilock。wifi没有进入睡眠状态,但我的线程仍然死了。如果其他进程唤醒系统,下载将以正常速度继续,然后再次减速。如果我唤醒手机,它会以正常速度继续运行,而不是在屏幕熄灭时再次减速。似乎线程被系统推到了后台。我想知道我是否可以阻止这种情况。