当屏幕方向改变时,会创建一个新的活动(activity)。

4

我对Android比较新,但在过去的一年中已经制作了很多应用程序,所以请原谅我。

我知道当您在设备上运行应用程序并通过旋转设备更改屏幕方向时,正在显示的活动将被完全重新创建。我打开YouTube应用程序(我正在使用Nexus 7 w/ Android 4.2.2)并播放一些视频,然后翻转屏幕以更改方向。视频继续播放,一切都会相应地重新调整大小......如果活动被完全重新创建,那么这是如何实现的?

谢谢。

2个回答

4

在你的AndroidManifest.xml文件中添加android:configChanges,这将避免在屏幕方向改变时重新创建活动。希望你的横屏和竖屏模式有相同的布局。

    <activity android:label="Your Activity Name" 
    android:configChanges="keyboardHidden|orientation|screenSize"
      android:name="com.yourpackage">

为了更好地补充这个问题,我建议您查看onPause()onResume()方法。如果您正在使用Fragments,则应该关注onSaveInstanceStateonRetainInstanceState而不是应用XML更改,因为"Activity被设计为被销毁。"。 http://developer.android.com/training/basics/activity-lifecycle/index.html

这是错误的建议... 应用程序必须保存它们的状态,这样它们就可以处理旋转更改以及操作系统回收它们的内存(当用户离开一段时间后)。使用此方法实际上是为了复杂的应用程序而设计的,在旋转时重新启动不划算,而大多数应用程序并非如此。 - Steven Byle
1
@StevenByle:我同意你的观点,在我的帖子中,我已经清楚地指出了要关注活动生命周期,因为Activity是按设计销毁的。 - Thalaivar
2
这种方法被市场上所有应用程序的大部分使用。完全销毁活动并在旋转时重新启动它是谷歌的一个巨大错误-它令人困惑,导致错误,并且是程序员痛苦的主要来源。他们不得不实施两个黑客来解决它,这证明了它只是一个坏主意。除非您的应用程序需要该功能,因为它具有完全不同的横向和纵向模式布局,否则这是修复它的正确方法-完全避免谷歌的坏主意,他们最终会意识到他们搞砸了并进行更改。 - Gabe Sechan
他应该为纵向和横向拥有布局。假设视频长度为10分钟。播放5分钟后更改方向。通过覆盖onSaveInstanceState(Bundle outState)来保存该状态,并在onRestoreInstanceState(Bundle savedInstanceState)中恢复相同的状态。 - Raghunandan
1
@Raghunandan:我明白了,但是你怎么说视频内容会有纵向和横向布局呢?我想这只是猜测,因为原帖并没有提到这一点。 - Thalaivar
显示剩余9条评论

-1

如果您担心在活动中丢失本地变量的值... 您可以为其中一些变量使用单例模式。这不是一个完美的解决方案,但可能有效。


这个回答与问题无关。 - Craig S. Anderson

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