Jon*_* S. 9 service multithreading android download wakelock
我有一个服务,它产生一个下载线程,有时下载大文件.我意识到,一旦手机进入睡眠状态,下载线程就会显着减慢,然后停止.
一个明显的补救措施,一个唤醒锁.所以我认为可以获得一个partial_wake_lock,只是为了让cpu处理下载.但这不起作用,相同的行为,下载速度减慢,然后在屏幕关闭时停止.
然后我尝试了screen_dim_wake_lock.这一次,屏幕保持打开(变暗),下载保持全速,直到完成,唤醒锁定,然后电话睡觉.
我的问题是,为什么我不能保持我的线程运行时,像在screen_dim_wake_lock期间一样持有partial_wake_lock?关于这两者之间的区别是否存在一些无证的行为?是因为我不是在UI线程上运行吗?
编辑:
我添加了一个wifilock.wifi没有进入睡眠状态,但我的线程仍然死亡.如果某个其他进程唤醒系统,则下载将以正常速度继续,然后再次减速.如果我唤醒手机,它将以正常速度继续,而不是在屏幕熄灭时再次减速.似乎线程被系统推入后台.我想知道我是否可以阻止这一点.
我在一项持续下载大量 URL 的服务中遇到了同样的问题。最好的方法是像您一样使用 screen_dim_wake_lock 并将您的服务带到前台,如此处所述。
通过这种方式,屏幕始终处于打开状态,因此您的 WI-FI 接口也会发生同样的情况。相反,如果您让手机闲置一段时间,15 分钟后屏幕将关闭,手机将进入睡眠模式,WIFI 也会关闭!
因此,另一种方法是使用partial_wake_lock(仅CPU开启)并更改手机的设置,以便WIFI始终开启(也许这看起来像您获得的WIFI_LOCK..):
这样,即使在屏幕关闭的睡眠模式下,您的服务也将正常工作。这里唯一的问题是:
如果您暂时失去 WIFI 连接,那么 Android 可能会终止您的服务,因为它将处于非活动状态。但是,如果您的手机始终连接到稳定性良好的 WIFI 网络,那么一切都会正常工作!
| 归档时间: |
|
| 查看次数: |
3672 次 |
| 最近记录: |