Android 即使AsyncTask的doInBackground在后台运行,那么AsyncTaskLoader';s loadInBackground()方法
与AsyncTask的doInBackground()类似,AsyncTask加载器的回调方法onLoadFinished()将在后台运行,并从URL获取响应,然后将响应发送到LoaderManager的onLoadFinished(),以将响应附加到视图,视图可能在主UI线程上运行,也可能不在主UI线程上运行。类似于onPostExecute()。我想知道,如果我使用AsynctaskLoader或LoaderManager,这里的真正优势是什么,它们有不同的用途。LoaderManager userd从某个源加载数据。AsyncTask只是用来在后台做一些事情 对此有一些解释。如你所见Android 即使AsyncTask的doInBackground在后台运行,那么AsyncTaskLoader';s loadInBackground()方法,android,android-asynctask,android-loader,Android,Android Asynctask,Android Loader,与AsyncTask的doInBackground()类似,AsyncTask加载器的回调方法onLoadFinished()将在后台运行,并从URL获取响应,然后将响应发送到LoaderManager的onLoadFinished(),以将响应附加到视图,视图可能在主UI线程上运行,也可能不在主UI线程上运行。类似于onPostExecute()。我想知道,如果我使用AsynctaskLoader或LoaderManager,这里的真正优势是什么,它们有不同的用途。LoaderManager
- 如果直接在活动或片段中获取数据,则 用户将因执行以下操作而缺乏响应能力 来自UI线程的查询可能会变慢
- 如果您从另一个线程获取数据,可能是使用AsyncTask, 然后您负责管理线程和UI 执行各种活动或片段生命周期事件,例如 onDestroy()和配置更改
- 加载程序在不同的线程上运行,以防止用户界面出现问题或无响应
- 加载程序通过在需要时提供回调方法来简化线程管理 事件发生了
- 加载器在配置更改期间保持并缓存结果,以防止重复查询
- 加载程序可以实现 观察者监视基础数据源中的更改。对于 例如,CursorLoader会自动将ContentObserver注册到 当数据更改时触发重新加载
AsyncTask
与活动生命周期不符。例如,如果AsyncTask
正在运行,并且用户旋转设备并重新启动活动,您将看到一些奇怪的行为。原因是AsyncTask
仍然挂起在onRotate期间销毁的活动的上一个实例AsyncTaskLoader
旨在解决此问题。