在AsyncTask中使用httpClient需要使用wakeLock吗?

4

我正在使用AsyncTask执行httpClient,但在此之前还有另一个AsyncTask用于生成一些数据,这可能需要很长时间。如果在执行httpClient之前设备进入睡眠状态会发生什么?我需要为httpClient请求使用wakeLock吗?


我认为异步任务也会在设备休眠时进入睡眠状态,并在设备唤醒时重新启动。如果你希望异步任务在没有任何休息的情况下完成工作,你需要使用 wakeLock。 - JackTools.Net
当 CPU 休眠时,线程或异步任务如何运行? - JackTools.Net
@JackTools.Net 我认为他们没有改变任何东西,因为Android是一个移动操作系统,如果没有运行的CPU,它就无法检查来电和短信;)不要将手机的省电设置与笔记本电脑的挂起/恢复功能混淆。 - Raffaele
请查看http://scape.cs.vt.edu/wp-content/uploads/2012/08/ITJ12_Android_Energy-Aware.pdf第三章。 - JackTools.Net
1
看一下这个页面,可能会有帮助。 - JackTools.Net
显示剩余7条评论
1个回答

0
如果设备进入睡眠状态,您的活动将调用onPause()。 如果您没有以某种花哨的方式取消/终止后台任务,则不会对其产生任何影响。AsyncTask在与主应用程序线程分开的单独线程中运行,因此无法阻止它们。 永远。

我不理解您的设计:为什么要使用两个单独的AsyncTask? 如果收集填充HTTP请求的数据需要时间,则应使用单个AsyncTask并在doInBackground()中完成所有操作,以确保不会发生竞争条件。 否则,您将不得不链接任务或在第一个任务中启动第二个任务,这听起来不太正确。

HTTP客户端只是一个套接字库,不是神话传说中的野兽 :)


即使我只使用单个AsyncTask,如果它是长时间运行的,我是否需要WakeLock? - SohailAziz
1
如果您使用一个、两个、三个、四个或一百个任务,就不需要使用wakeLock。演示项目会休眠十秒钟,然后记录一行日志。启动此Activity(需要4.0+),查看在设备屏幕关闭时是否打印了日志行。 - Raffaele
我的日志已经打印了,但HttpClient没有工作。当使用wakelock时运行得非常完美。 - SohailAziz
@SohailAziz 不认为这是WakeLock的问题。你能否运行以下代码(需要4.0+和INTERNET权限)?:(http://pastebin.com/TUPgFDQ2) - Raffaele
@Raffaelle,将你的演示项目修改为每分钟向日志中写入一行,并运行一到两个小时进行测试。如果在两个小时后获得了120条日志行,则我相信你不需要使用wake_lock。 - JackTools.Net

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接