Android:AsyncTaskbuild议:私人类还是公共类?

目前我正在开发一些Android应用程序,在过去的几个月里我们使用了两种不同的方法(一种是我个人喜欢的,另一种是开发人员喜欢的)。

虽然到目前为止结果是一样的,这让我想知道…我们应该:

  • 在使用它们的活动中使用AsyncTasks作为私人类。
  • 或者使用AsyncTasks作为单独的公共类来接收活动的上下文

Google推荐的方法有哪些?

你的经验对此有什么看法(优点,缺点,问题)?

内部类对于表示对象来说是很好的,这些对象是私有的,或者与封闭类相关联。 偶尔会有使用内部类的技术原因(例如,模拟闭包)。 他们还减less了命名空间的污染。

内部类的一个缺点是,如果他们访问封闭类的私有成员(字段或函数),编译器将为这些成员生成访问函数。 语言纯粹主义者会争论这种破坏封装是好事还是坏事。 访问函数为每个访问添加一些开销(通常不是一个因素,但是它是)。 另一个缺点是它使得源文件更加复杂,难以pipe理。 (我偶尔会在内部类中编辑一个函数,同时认为它在外部类中,反之亦然)。最后,内部类往往不可重用,而单独的类通常可以被参数化以具有多种用途。

这些利弊是我的头顶。 我相信别人会有更多的想法。

更新:

在这个Google IO video中 ,内部的AsyncTask选项显然被标记为错误的选项。

没关系,使用对你的代码最有意义的东西。 重要的是要注意一个asynchronous的任务,在活动被销毁之后持有对活动的引用,或者隐式地作为活动的内部类,或者通过被赋予活动/上下文对象来明确。