我很想知道当Android设备被轮换时(即配置发生变化时)会覆盖哪些方法?
onSaveInstanceState(...)
,onConfigurationChanged(...)
,onRestoreInstanceState(...)
- 类似于此?
我也很有兴趣听听与更改配置相关的整个过程。感谢。
答案 0 :(得分:5)
根据Android开发者参考,您必须使用:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
有关详细信息,请参阅:http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
您可能有兴趣看到:http://developer.android.com/guide/topics/manifest/activity-element.html#config
在这里,您可以找到可以收听的所有配置监听器。
请记住将它们放入android清单中:
<activity
android:configChanges=["orientation"]
. . .
</activity>
希望这会有所帮助......
答案 1 :(得分:4)
当您旋转设备时,您的活动将重新创建,所有变量将被重新初始化。因此,在这种情况下,如果您希望某些值在Rotation上保持相同,您也可以使用onSaveInstanceState()
存储其状态,并且可以通过检查Bundle不为空来再次在onCreate()
中恢复。
if(savedInstanceState != null){
// get the restore value from the Bundle
}
旋转设备时将调用onConfigurationChanged()
的位置(请注意,只有在选择了要使用清单中的configChanges
属性处理的配置时,才会调用此选项)。从参数中,您将获得新设备配置。
如果您不希望在旋转设备时重新创建活动,则必须将此行添加到AndroidManifest
文件中的活动代码中。
android:ConfigChanges="keyboardHidden|orientation"
答案 2 :(得分:2)
来自android开发者......
在运行时配置更改期间保留对象:
onRetainNonConfigurationInstance()
方法以返回您要保留的对象。getLastNonConfigurationInstance()
以恢复您的对象。Android在onStop()和onDestroy()之间调用onRetainNonConfigurationInstance(),因为配置更改而关闭了Activity。在onRetainNonConfigurationInstance()的实现中,您可以返回所需的任何Object,以便在配置更改后有效地恢复您的状态。
如果您的应用程序从Web加载大量数据,则这可能很有价值。如果用户更改了设备的方向并且活动重新启动,则应用程序必须重新获取数据,这可能很慢。您可以执行的操作是实现onRetainNonConfigurationInstance()
以返回携带数据的对象,然后在使用getLastNonConfigurationInstance()
重新启动活动时检索数据。
请点击此处查看更多信息Retaining an Object During a Configuration Change您还可以找到他们的示例..
谢谢..
答案 3 :(得分:1)
转到Manifest并添加: 机器人:configChanges = “取向|屏幕尺寸”
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"
android:configChanges="orientation|screenSize"
/>
在主要活动中:复制并粘贴此代码:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
全部完成 -