甚至doInBackground的AsyncTask都在后台运行,那么AsyncTask loader的loadInBackground()方法有什么优势呢?

时间:2017-01-20 15:03:18

标签: android android-asynctask android-loader

与AsyncTask的doInBackground()类似,asynctask loader的回调方法onLoadFinished()将在后台运行并从URL获取响应,然后将响应发送到LoaderManager的onLoadFinished()以将响应附加到视图,可能或可能不在主UI线程上运行。类似于onPostExecute()。如果我使用AsynctaskLoader或LoaderManager

,我想知道这里的真正优势是什么

1 个答案:

答案 0 :(得分:0)

他们有不同的目的。 LoaderManager用户从某些源加载数据。而AsyncTask只是习惯于在后台做点什么。

Here是对此的一些解释。如你所见

  • 如果您直接在活动或片段中获取数据,那么您的 用户将因执行而缺乏响应能力 来自UI线程的潜在慢查询。
  • 如果您从另一个线程获取数据,可能使用AsyncTask, 那么你负责管理线程和UI 线程通过各种活动或片段生命周期事件,如 onDestroy()和配置更改。

  

装载机解决了这些问题并包含其他好处。例如:

     
      
  • 加载程序在不同的线程上运行,以防止janky或无响应的UI。

  •   
  • 加载程序通过提供回调方法来简化线程管理   事件发生。

  •   
  • 加载程序会在配置更改中保持并缓存结果,以防止重复查询。
  •   
  • 装载机可以实现   观察者监视底层数据源的变化。对于   例如,CursorLoader自动注册ContentObserver   数据发生变化时触发重新加载。
  •