在我的Android应用程序中,当我旋转设备(从键盘上滑出)时,我的Activity被重新启动(onCreate被调用)。现在,可能是这样的,但是我在onCreate方法中做了很多初始设置,所以我需要:
onCreate,并且布局只是调整或onCreate就不会被调用。发布于 2009-01-19 08:47:59
使用应用程序类
根据您在初始化过程中所做的事情,您可以考虑创建一个扩展Application的新类,并将您的初始化代码移动到该类中重写的onCreate方法中。
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}只有在创建了整个应用程序时,应用程序类中的onCreate才会被调用,因此在方向或键盘可见性更改上重新启动的活动不会触发它。
很好的做法是将该类的实例公开为单例,并公开使用getters和setter初始化的应用程序变量。
注意:您需要在清单中指定新应用程序类的名称,以便注册和使用:
<application
android:name="com.you.yourapp.MyApplicationClass"响应配置更改的() [UPDATE:这是从API 13;http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html中删除的]
作为另一种选择,您可以让应用程序侦听可能导致重新启动的事件--比如方向和键盘可见性更改--并在您的活动中处理它们。
从将android:configChanges节点添加到活动的清单节点开始
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name"><activity android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name">然后,在活动中重写onConfigurationChanged方法,并调用setContentView强制在新的方向上重新执行GUI布局。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}发布于 2012-03-03 21:56:40
Android 3.2及更高版本的更新:
警告:从Android3.2 (API级别13)开始,当设备在纵向和横向之间切换时,的“屏幕大小”也会改变。因此,如果希望在为API级别13或更高级别开发时(如minSdkVersion和targetSdkVersion属性声明的那样)时由于方向更改而防止运行时重新启动,则除了
"orientation"值之外,还必须包含"screenSize"值。也就是说,您必须声明android:configChanges="orientation|screenSize"。但是,如果应用程序的目标是API级别12或更低,那么您的活动总是自行处理此配置更改(即使在Android3.2或更高的设备上运行,此配置更改也不会重新启动您的活动)。
来自http://web.archive.org/web/20120805085007/http://developer.android.com/guide/topics/resources/runtime-changes.html
发布于 2012-08-04 21:04:23
与其试图完全阻止onCreate()被触发,不如尝试检查传递到事件中的Bundle savedInstanceState,看看它是否为空。
例如,如果我有一些在真正创建Activity时应该运行的逻辑,而不是在每个方向上更改时运行,那么只有当onCreate()为null时,我才在savedInstanceState中运行该逻辑。
否则,我仍然希望布局重新绘制正确的方向。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game_list);
if(savedInstanceState == null){
setupCloudMessaging();
}
}不确定这是否是最终的答案,但这对我有用。
https://stackoverflow.com/questions/456211
复制相似问题