android:configChanges="keyboardHidden|orientation"
呢?优点: - 不用担心活动旋转 - 更快
缺点: - 如果布局依赖于屏幕大小(例如具有两列的布局),则需要更改布局。 - 没有灵活的方法在不同方向上使用不同的布局 - 在使用片段时效果不好
但如果我们不使用不同的布局,为什么不用它呢?
android:configChanges="keyboardHidden|orientation"
呢?在Android上发生某些关键配置更改时(一个常见的例子是方向更改),默认情况下,Android会完全重新启动正在运行的Activity以帮助它适应这些更改。
当您在AndroidManifest中定义android:configChanges =“keyboardHidden | orientation”
时,您告诉Android:“当键盘被拉出或手机旋转时,请不要执行默认重置操作;我想自己处理这个问题。是的,我知道我在做什么。”
这是一件好事吗?我们很快就会看到...
你开始拥有的优点之一是:
无需担心您的活动被旋转
在许多情况下,人们错误地认为当屏幕方向改变(“旋转”)引发错误时,他们只需添加android:configChanges =“keyboardHidden | orientation”
即可轻松解决问题。
然而,android:configChanges =“keyboardHidden | orientation”
只是一种临时措施。实际上,配置更改可以触发许多方式。例如,如果用户选择了新语言(即区域设置已更改),则您的Activity将以与方向更改相同的方式重新启动。如果您愿意,可以查看各种配置更改类型的列表。
编辑:更重要的是,正如hackbod在评论中指出的那样,当您的应用程序处于后台且Android决定通过终止它来释放一些内存时,您的活动也将被重新启动。当用户回到您的应用程序时,Android会尝试以与其他配置更改相同的方式重新启动活动。如果您无法处理此问题-用户将不会满意...
换句话说,使用android:configChanges="keyboardHidden|orientation"
并不是解决您的“烦恼”的方法。正确的方式是编写活动以使其能够满足Android对它们进行的任何重新启动。这是一个好的做法,将帮助您在以后的道路上,所以请习惯它。android:configChanges ="keyboardHidden | orientation"
适合您,请务必测试发生更改时会发生什么,因为方向更改并不是触发完全重新启动活动的唯一方式。我不明白为什么...偶尔重启在我看来没问题...configChanges 对我来说处理了大多数情况...也许在某些类型的应用程序中,这可能是个问题,但这实际上取决于应用程序的类型以及当应用程序重新启动时如何恢复状态...当我的一个应用程序重新启动时,用户会被登录并且最后的活动由我的代码打开,用户只需要失去一些回到之前的步骤,但这不是什么大问题...在其他一些状态始终保持,并且某些状态始终在重新启动时恢复。当活动重新启动时,必须是应用程序没有被使用或者类似的情况...所以根本没有问题...例如,在游戏中,这可能是个问题,或者在其他某些类型的应用程序中,我不知道...
我认为,当你这样做时,应用程序在正常情况下运行得很好。而且,代码更易读,不需要大量的逻辑来保存和恢复,否则你只会制造新的错误,并且需要一直维护它...当然,如果 Android 耗尽电力并杀死您的应用程序窗口,它会丢失上下文并重新开始,但这只发生在特殊情况下,并且在较新的设备上,我相信这种情况越来越少...
别打我,但我在各种应用程序中都相当成功地使用了这个… android:configChanges="locale|keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 但我知道对于某些特殊类型的应用程序来说可能不是个好方法,但大多数应用程序都可以很好地使用它。
是的,我认为暂停比释放播放器更快。但仍然需要暂停。
现在已经找到了一个不会暂停歌曲的解决方案。
在清单中声明您将处理屏幕方向的配置更改,然后使用onConfigurationChanged方法加载布局文件。通过在logCat中执行此操作,我可以看到未调用onPause、onCreate和onResume,因此歌曲不会暂停。
更新清单文件以处理屏幕方向。
android:configChanges="orientation|screenSize"
添加以下代码:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
setContentView(R.layout.activity_main);
}