我目前正在团队中开发一些Android应用程序,我们在过去几个月中使用了两种不同的方法(一种是我个人偏爱的方法,另一种是其他开发者偏爱的方法)。
虽然到目前为止结果相同,但这让我想知道...我们应该:
- 将AsyncTasks作为私有类嵌入到使用它们的活动中;
- 或将AsyncTasks作为单独的公共类,接收活动的上下文。
这些方法中是否有任何一种被Google推荐?
根据您的经验,这些方法有什么优点、缺点和问题?
我目前正在团队中开发一些Android应用程序,我们在过去几个月中使用了两种不同的方法(一种是我个人偏爱的方法,另一种是其他开发者偏爱的方法)。
虽然到目前为止结果相同,但这让我想知道...我们应该:
这些方法中是否有任何一种被Google推荐?
根据您的经验,这些方法有什么优点、缺点和问题?
内部类适合表示私有对象或与封闭类密切相关的对象。偶尔使用内部类有技术上的原因(例如模拟闭包)。它们还可以减少命名空间污染。
内部类的一个缺点是,如果它们访问封闭类的私有成员(字段或函数),编译器将生成访问器函数来访问这些成员。语言纯粹主义者会争论这种打破封装性质是好事还是坏事。访问函数为每次访问添加了一些开销(通常不是因素,但就在那里)。另一个缺点是它使源文件更复杂,因此更难管理。(我偶尔会在认为在外部类中编辑函数时被内部类中的函数所伤害,反之亦然。)最后,内部类往往不可重用,而单独的类通常可以参数化以具有多个用途。
这些优点和缺点是我脑海中的。我相信其他人会有额外的想法。
更新:
在这个Google IO video中,内部AsyncTask选项被明确标记为错误选项。
无论使用什么代码最有意义,都不重要。重要的是要注意异步任务在活动被销毁后仍保持对活动的引用,无论是作为活动的内部类隐式地还是通过给予活动/上下文对象显式地。