AsyncTask 中的httpClient 需要wakeLock 吗?

Posted

技术标签:

【中文标题】AsyncTask 中的httpClient 需要wakeLock 吗?【英文标题】:Does httpClient in AsyncTask need wakeLock? 【发布时间】:2012-12-12 06:27:02 【问题描述】:

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

【问题讨论】:

我认为异步任务也会在设备唤醒时进入睡眠状态并唤醒。如果你想让你的异步任务在不休息的情况下完成他的工作,你必须使用 wakeLock。 @JackTools.Net 你为什么相信它? cpu休眠时线程或异步任务如何运行? @JackTools.Net 请定义 CPU 睡眠 看看 [this][1] 页面。这会很有帮助。 [1]:***.com/questions/5120185/android-sleep-standby-mode 【参考方案1】:

如果设备进入睡眠状态,则会调用您的活动onPause()。如果您不以某种奇特的方式取消/终止后台任务,则不会发生任何事情。 AsyncTask 运行在与主应用程序不同的线程中,因此没有什么可以阻止它们。永远。

我不明白你的设计:两个独立的AsyncTasks 的目的是什么?如果收集数据以填充 HTTP 请求需要时间,您应该使用单个 AsyncTask 并在 doInBackground() 中执行所有操作,以确保不会发生竞争条件。否则,您必须链接任务,或者在第一个任务中触发第二个任务,这听起来不对。

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

【讨论】:

即使我使用单个 AsyncTask,如果它长时间运行,我是否需要 wakeLock? 你永远不需要唤醒锁,如果你使用一、二、三、四、一百个任务。 Demo project 休眠十秒钟,然后记录一行。启动此 Activity(需要 4.0+)并查看在设备屏幕关闭时是否打印日志行 我的日志也打印了,但是 HttpClient 不工作。使用唤醒锁时工作完美。 @SohailAziz 认为这不是 WakeLock 的问题。你能运行following code(需要4.0+和INTERNET权限)吗? @Raffaelle 将您的演示项目更改为每分钟在您的日志中写入一行并运行一两个小时来测试它。如果你在两个小时后得到 120 条日志,那么我相信你不需要 wake_lock。

以上是关于AsyncTask 中的httpClient 需要wakeLock 吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该使用 OkHttp 而不是 android httpClient 和 AsyncTask

使用 HttpClient 的 HTTP Post 请求需要 2 秒,为啥?

如何从 httpclient 调用中获取内容正文?

AsyncTask下载JSON

android 异步任务AsyncTask

带有适配器“”的 ViewPager 需要 AsyncTask 中的视图 ID