Android AsyncTaskLoader可以替换AsyncTask吗?

Android AsyncTaskLoader可以替换AsyncTask吗?,android,android-asynctask,Android,Android Asynctask,我觉得AsyncTaskLoader基本上是一个更好的AsyncTask,尽管我不完全确定是否应该用AsyncTaskLoader替换我的AsyncTask实现 让我困惑的是加载程序的名称有点建议它应该用于加载数据 如果我想写入数据(例如,写入文件)或执行任何其他后台操作(不加载),该怎么办 Loaders是否适用于我通常使用的AsyncTask的任何后台操作?加载程序用于加载数据,是的。它们填补的漏洞是,当您调用LoaderManager\init()时,您可以在配置更改时“重新连接”到它。这

我觉得
AsyncTaskLoader
基本上是一个更好的
AsyncTask
,尽管我不完全确定是否应该用
AsyncTaskLoader
替换我的
AsyncTask
实现

让我困惑的是
加载程序
的名称有点建议它应该用于加载数据

如果我想写入数据(例如,写入
文件
)或执行任何其他后台操作(不加载),该怎么办


Loader
s是否适用于我通常使用的
AsyncTask
的任何后台操作?

加载程序用于加载数据,是的。它们填补的漏洞是,当您调用
LoaderManager\init()
时,您可以在配置更改时“重新连接”到它。这样做的目的是

  • 如果装载机尚未启动,它将启动装载机
  • 如果加载器已启动但尚未完成,它将把回调连接到加载器,并在加载回调时向其提供数据
  • 如果加载程序已经启动并完成,它将不会启动加载程序并将加载的信息传递给回调 这意味着,如果用户把手机放在口袋里,它只是不断地反复旋转,你就不会为了获取一条数据而开始上百个加载任务


    你不会真的关心那些简单的、容易忘记的任务。您可能也不希望发生这种情况,因为您可能希望执行所有文件写入操作,而加载程序的情况并非如此,除非您每次都重新启动它们。在这种情况下,你就违背了装载机的目的

    加载程序用于加载数据,是的。它们填补的漏洞是,当您调用
    LoaderManager\init()
    时,您可以在配置更改时“重新连接”到它。这样做的目的是

  • 如果装载机尚未启动,它将启动装载机
  • 如果加载器已启动但尚未完成,它将把回调连接到加载器,并在加载回调时向其提供数据
  • 如果加载程序已经启动并完成,它将不会启动加载程序并将加载的信息传递给回调 这意味着,如果用户把手机放在口袋里,它只是不断地反复旋转,你就不会为了获取一条数据而开始上百个加载任务



    你不会真的关心那些简单的、容易忘记的任务。您可能也不希望发生这种情况,因为您可能希望执行所有文件写入操作,而加载程序的情况并非如此,除非您每次都重新启动它们。在这种情况下,你就违背了装载机的目的

    AsyncTaskLoader有什么比AsyncTask更好?AsyncTaskLoader不像AsyncTask那样提供进度更新,但otherwse您可以使用AsyncTaskLoader而不是AsyncTask,只返回空对象。“什么是关键点?”@鸡蛋处理配置的变化是一个麻烦,在代码< ASYCastase<代码>,但是<代码> AsyncTaskLoader < /代码>使它有点容易,这是我考虑的主要原因。考虑使用<代码> ItnService < /代码>对于长时间运行的后台任务,这些任务不绑定到UI。我的后台操作相对较短,并且绑定到UI,但是实现AsyncTask以正确处理配置更改是非常痛苦的。AsyncTaskLoader有什么比AsyncTask更好的地方?AsyncTaskLoader不像AsyncTask那样提供进度更新,但otherwse您可以使用AsyncTaskLoader而不是AsyncTask,只返回空对象。“什么是关键点?”@鸡蛋处理配置的变化是一个麻烦,在代码< ASYCastase<代码>,但是<代码> AsyncTaskLoader < /代码>使它有点容易,这是我考虑的主要原因。考虑使用<代码> ItnService < /代码>对于长时间运行的后台任务,这些任务不绑定到UI。我的后台操作相对较短,并且绑定到UI,但是实现AsyncTask以正确处理配置更改非常痛苦。谢谢您的回答。我考虑装入器的主要原因是配置更改的处理。用AsyncTask正确地实现它似乎真的很难。如果我不想回电话参加活动,WeakReference可能会有所帮助。使用无头碎片似乎是唯一的方法,但它们感觉像是杀伤力过大。@justanoob:另一件你必须注意的事情是,如果你重新启动加载程序,加载程序将取消以前的加载。AsyncTask无法完成此任务。使用LocalBroadcastReceiver的IntentService可能是将UI与后台任务分离的更简单的方法。您发布的所有任务最终都将执行,您的活动只需侦听BroadcastReceiver。我对IntentService+LocalBroadcastReceiver方法的问题还在于配置更改。即使我在onCreate()/onDestroy()中注册/取消注册我的接收器,也有可能在定向更改期间,在onDestroy()之后和onCreate()之前进行广播,在这种情况下,我没有收到广播(我已经测试过了)。@justanoob如果这是一项必须完成的重要操作,您只需要这样做。活动是易变的,因此用户可以离开活动,Android可以在操作完成之前从内存中提取其进程。如果发生这种情况,那么错过一次广播可能会有更大的问题。同时,如果没问题的话,那也没关系。@justanoob粘性广播可以帮助解决错过它们的问题谢谢你的回答。我考虑装入器的主要原因是配置更改的处理。用AsyncTask正确地实现它似乎真的很难。如果我不想回电话参加活动,WeakReference可能会有所帮助。使用无头碎片似乎是唯一的方法,但它们感觉像是过度杀戮。@justanoob:你还有另一件事