Android 什么时候使用OnRetainonConfiguration实例()不合适

Android 什么时候使用OnRetainonConfiguration实例()不合适,android,orientation,Android,Orientation,onretainonconfigurationinstance()的文档中说:“调用此函数纯粹是为了优化,您不能依赖于调用它。” 在什么情况下将不调用onretainonconfigurationinstance() 关于我试图实现的目标的一些背景信息:我希望我的活动能够得到有关方向的通知可靠地更改(但也希望活动像往常一样被终止和重新启动)。如果您想在方向更改时再次重新启动活动(调用onCreate->onResume),则不需要放置configChanges=“orientation”在舱单

onretainonconfigurationinstance()
的文档中说:“调用此函数纯粹是为了优化,您不能依赖于调用它。”

在什么情况下将不调用
onretainonconfigurationinstance()


关于我试图实现的目标的一些背景信息:我希望我的
活动
能够得到有关
方向的通知
可靠地更改(但也希望活动像往常一样被终止和重新启动)。

如果您想在方向更改时再次重新启动活动(调用onCreate->onResume),则不需要放置configChanges=“orientation”在舱单上。您可以在活动的onCreate方法中检查屏幕的方向,这可能是您所需要的。如果不希望活动重新启动自身,而只是切换方向,则在活动的清单中添加configChanges标志,然后仅调用onConfigurationChanged(),您也可以从中获取屏幕方向。第二种方法在onCreate方法中运行昂贵的操作(启动线程查询数据库等),并且希望将这些信息/数据重新用于纵向和横向时很有用。即使您愿意,您也可以在onConfigurationChanged()中更改布局,方法与创建时相同,但您仍然需要找到对所有视图的引用,因为在这种情况下,它们的ID不相同


在任何情况下,如果您希望引用orentation更改之前存在的内容,configChanges方式更适合处理更改,但如果您正在更改布局或其他内容,则需要进行更多的工作。

有很多优点,但没有回答我的问题。我想要的是I)当方向发生变化时,对活动中的“复杂”对象执行特定操作ii)执行操作后,让活动像往常一样停止并重新创建。我找不到可靠的方法来实现这一点。对于我在前面的评论中概述的需求,我考虑使用OnRetainonConfiguration Instance()。但是看到文档显示它不“可靠”,因此我提出了问题。可靠性来自于这样一个事实,即活动可能会因为不同于方向更改的原因而重新启动。因此,唯一重要的是在调用getLastNonConfigurationInstance()时实际执行null检查,如果为null,则再次获取该数据,或者使用某种机制从类似的情况中恢复。但一般来说,这需要测试。如果这会给您带来问题,那么使用配置更改重做。