【问题标题】:Android - Difference between Thread and AsyncTask?Android - 线程和异步任务之间的区别?
【发布时间】:2015-05-08 22:34:01
【问题描述】:

在我的应用程序中,我有按钮,单击时将查询数据库并在屏幕上显示结果。查询动作通常需要 1 ~ 3 秒。这些按钮会被非常频繁地点击。

我已经在 AsyncTask 和 Thread 上实现了这个动作,但几乎没有什么不同。

但是从长远来看,尤其是当按钮被多次点击时,这在资源(CPU、内存)方面会更有利吗?

【问题讨论】:

  • AsyncTaskloader 是我的猜测:stackoverflow.com/a/20279805/2413303
  • 感谢您重播 EpicPandaForce。我读了链接。他们说:“AsyncTaskLoader 可以通过屏幕翻转等配置更改存活下来”。但是查询很短,是否还需要处理配置更改?
  • @ngubk,几乎在所有情况下都需要处理配置更改

标签: java android android-asynctask android-handler java-threads


【解决方案1】:

当您使用Thread 时,您必须使用runOnUiThread() 方法更新主线程上的结果,而AsyncTask 具有onPostExecute() 方法,它会在doInBackground() 之后自动在主线程上执行返回。

虽然这两者在“哪个更有益”方面没有显着差异,但我认为AsyncTask 抽象的设计是为了让程序员不必同步 UI 和工作线程。使用Thread 时,可能并不总是像调用runOnUiThread() 那样简单;它会很快变得非常棘手。所以如果我是你,我会坚持使用AsyncTask 并保留Thread 用于更专业的情况。

【讨论】:

  • 感谢您的回复。但就我而言,我在线程中使用 handler.sendMessage() 而不是 runOnUiThread(),这样好还是 AsyncTask 更好?
  • 我的实现与这个答案非常相似:stackoverflow.com/questions/13954611/…
  • 我明白......我可以说的是AsyncTask 专门用于两个线程之一是 UI / 主线程的情况。 ThreadHandler 甚至可以在两个线程都不是 UI 线程时使用。我希望你能理解这种区别......这就是为什么每当涉及 UI 时,最好使用AsyncTask,因为这是一个可识别的习语:)......你当然可以继续使用ThreadHandler 作为它也同样正确。
  • 感谢您的回答。然后我将使用 AsyncTask,因为它是一个很好的实践
【解决方案2】:

AsyncTask 用于进行一些后台计算并将结果发布到 UI 线程(带有可选的进度更新)。既然您不关心 UI,那么 HandlerThread 似乎更合适。

参考:Handler vs AsyncTask vs Thread

【讨论】:

  • 不关心用户界面?他说他必须在屏幕上显示结果。
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多