Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 即使AsyncTask的doInBackground在后台运行,那么AsyncTaskLoader';s loadInBackground()方法_Android_Android Asynctask_Android Loader - Fatal编程技术网

Android 即使AsyncTask的doInBackground在后台运行,那么AsyncTaskLoader';s loadInBackground()方法

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

与AsyncTask的doInBackground()类似,AsyncTask加载器的回调方法onLoadFinished()将在后台运行,并从URL获取响应,然后将响应发送到LoaderManager的onLoadFinished(),以将响应附加到视图,视图可能在主UI线程上运行,也可能不在主UI线程上运行。类似于onPostExecute()。我想知道,如果我使用AsynctaskLoader或LoaderManager,这里的真正优势是什么,它们有不同的用途。LoaderManager userd从某个源加载数据。AsyncTask只是用来在后台做一些事情

对此有一些解释。如你所见

  • 如果直接在活动或片段中获取数据,则 用户将因执行以下操作而缺乏响应能力 来自UI线程的查询可能会变慢
  • 如果您从另一个线程获取数据,可能是使用AsyncTask, 然后您负责管理线程和UI 执行各种活动或片段生命周期事件,例如 onDestroy()和配置更改
而且

装载机解决了这些问题,并带来了其他好处。例如:

  • 加载程序在不同的线程上运行,以防止用户界面出现问题或无响应

  • 加载程序通过在需要时提供回调方法来简化线程管理 事件发生了

  • 加载器在配置更改期间保持并缓存结果,以防止重复查询

  • 加载程序可以实现 观察者监视基础数据源中的更改。对于 例如,CursorLoader会自动将ContentObserver注册到 当数据更改时触发重新加载


AsyncTask
与活动生命周期不符。例如,如果
AsyncTask
正在运行,并且用户旋转设备并重新启动活动,您将看到一些奇怪的行为。原因是
AsyncTask
仍然挂起在onRotate期间销毁的活动的上一个实例
AsyncTaskLoader
旨在解决此问题。