为什么 onAttach (Activity activity) 被弃用了?

12

在将SDK更新到API 23级后,我发现 onAttach(Activity activity) 方法已被弃用,新方法是 onAttach(Context context)。有人能告诉我为什么会进行这种更改吗?

2个回答

5

我认为基本上是扩展了方法的范围,但是官方变更记录没有提到任何有关它的内容。

正如您在变更记录中所看到的,他们删除了void onAttach(Activity),但是添加了一个具有相同名称的新方法,并且它说已经被弃用了Android 官方文档

正如richq所评论的那样,Fragment 的支持版本也废弃了onAttach(Activity),并且拥有一个可以代替所有 Android 版本(甚至是史前版本)的onAttach(Context)。

为了适应这些新的变化,您可以按照以下步骤进行:

  • 将onAttach回调的参数类型从Activity更改为Context。由于未知原因,这个修改导致了在片段生命周期中不再调用onAttach(Context)方法。

  • 将代码从onAttach方法移动到onCreate方法中,因为它仍然会被执行。

通过这个修改,应用程序可以像以前一样运行。不需要额外的导入语句。


1
Fragment的支持版本也已经弃用了onAttach(Activity),并提供了一个onAttach(Context)方法,可以在所有Android版本上使用,甚至是远古版本。 - richq
我会编辑答案并加入你的评论,因为我发现它非常有用。 - arodriguezdonaire
onAttach回调函数的参数类型从Activity更改为Context。由于未知原因,这种修改导致在片段生命周期中不再调用onAttach(Context)方法。这让我感到困惑 - 你是不是想说"onAttach(Activity)在片段生命周期中不再被调用了"? - stkent
不,如果你看文档,你就会发现不仅参数已经改变,方法的行为也已经改变了。 - arodriguezdonaire
相信谷歌与咖啡生产商有交易;进行微小(且不必要)的更改,让开发人员整天都能靠咖啡保持精力充沛。 - fahmy
2
@arodriguezdonaire 这并不回答问题“为什么?”。与此更改相关的其他更相关的“如何修复代码?”问题。 “我认为它基本上是扩展方法的范围”,这意味着您现在可以连接更多内容,而不仅仅是活动,但是如何以及在哪里? - TWiStErRob

4
在这个变化之前,Fragment 只能附加在 Activity 上。随着这个变化,Google 将可以将 Fragment 附加到 Service 上。就像 Facebook 聊天头像的工作方式一样,它们可以在 Activity 外部浮动一个 Fragment。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接