Android 什么';在后台线程中为活动执行操作的最简单方法是什么?

Android 什么';在后台线程中为活动执行操作的最简单方法是什么?,android,multithreading,Android,Multithreading,我相信这个问题会被问到很多,但我正在寻找一个最简单的解决方案,考虑到Android的最佳实践(没有试图保留单个活动实例的黑客清单)。另外,我不是在寻找retainFragment解决方案 我正在寻找在活动中启动后台任务并提供回调函数的最简单方法。如果重新创建了活动(配置更改),那么我希望旧活动释放引用,并将回调附加到新活动实例 最后,我不想再做手术了。也就是说,如果它是某个HTTP资源,那么应该缓存它,这样操作就不会再次浪费运行 谢谢 首先,您需要将任务执行和活动(UI)解耦。要实现这一点,您可

我相信这个问题会被问到很多,但我正在寻找一个最简单的解决方案,考虑到Android的最佳实践(没有试图保留单个活动实例的黑客清单)。另外,我不是在寻找retain
Fragment
解决方案

我正在寻找在
活动中启动后台任务并提供回调函数的最简单方法。如果重新创建了
活动
(配置更改),那么我希望旧活动释放引用,并将回调附加到新活动实例

最后,我不想再做手术了。也就是说,如果它是某个HTTP资源,那么应该缓存它,这样操作就不会再次浪费运行


谢谢

首先,您需要将任务执行和活动(UI)解耦。要实现这一点,您可以使用UI发送给某些
任务执行者的事件。基本思想如下所示:

  • 调用方法
    onResume
    时,您注册活动以接收事件
  • 然后在稍后的某个地方执行任务,从网络加载一些数据
  • 接下来,您有三个选项:
    • a) 任务已完成,您的活动已存在。任务发送事件“i'm_finished”。你的活动收到了它
    • b) 任务已完成,但您的活动已被销毁/隐藏。当活动被隐藏时,系统称为活动的
      onStop
      方法,您可以在其中注销活动以接收新事件。所以事件并没有被交付
    • c) 任务未完成,已创建新活动。“新活动”检查数据是否可用或正在以
      onResume
      方法下载。如果已下载,则显示,如果未下载,则等待
  • 详细说明如下:


    Android最流行的事件库:根据我的经验,最简单的方法实际上是使用AsyncTask()。但是,在配置更改后,这可能会爆炸。因此,您可能应该将该异步任务附加到“HeadlessFragment”上。对于片段,可以启用“setRetainInstanceState”,这样就不会重新创建片段。然后在配置更改之后,您可以再次附加到该片段。

    我建议您在
    AsyncTask
    的子类上使用静态
    WeakReference
    。并根据
    活动
    生命周期对其进行更新。别忘了检查空引用和非异步任务解决方案?考虑到它现在不赞成使用加载器。
    AsyncTask
    肯定不反对,更不用说支持加载器了。您也可以考虑解释为什么在这种情况下您不喜欢保留片段。您是正确的“普通SWARE”,它不像Android团队正在推动加载程序的使用那样被贬低。另外,我不想每次我想做一个简单的网络请求时都要创建一个片段。给猫剥皮有很多方法,但正如标题所示,我正在寻找最简单的解决方案。如果能够创建一个简单的活动,它可以执行简单的Restful API调用并填充视图,而无需在设备上重新运行该后台任务,那就太好了。谢谢很抱歉,在完成这篇文章之后,还有一个想法:您还可以将一个AsyncTask附加到您的应用程序类。根据我的经验,这是Android应用程序中很少用到的功能,但非常有用。可以在此处找到一些信息: