在我的 Android 应用程序中,当我旋转设备(滑出键盘)时,我的设备Activity会重新启动(onCreate被调用)。现在,这可能是它应该的样子,但是我在方法中做了很多初始设置onCreate,所以我需要:
Activity
onCreate
使用应用程序类
根据您在初始化中所做的事情,您可以考虑创建一个新类,该类扩展Application并将您的初始化代码移动到onCreate该类中的重写方法中。
Application
public class MyApplicationClass extends Application { @Override public void onCreate() { super.onCreate(); // TODO Put your application initialization code here. } }
应用程序类中的onCreate仅在创建整个应用程序时调用,因此 Activity 在方向或键盘可见性更改时重新启动不会触发它。
将此类的实例公开为单例并公开使用 getter 和 setter 初始化的应用程序变量是一种很好的做法。
注意:您需要在清单中指定新应用程序类的名称才能注册和使用它:
<application android:name="com.you.yourapp.MyApplicationClass"
对配置更改做出反应 [更新:自 API 13 起已弃用; 请参阅推荐的替代方案]
作为另一种选择,您可以让您的应用程序侦听可能导致重新启动的事件 - 例如方向和键盘可见性更改 - 并在您的 Activity 中处理它们。
首先将android:configChanges节点添加到 Activity 的清单节点
android:configChanges
<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">
或适用于Android 3.2(API 级别 13)及更高版本:
<activity android:name=".MyActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/app_name">
然后在 Activity 中覆盖该onConfigurationChanged方法并调用setContentView以强制在新方向上重新完成 GUI 布局。
onConfigurationChanged
setContentView
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setContentView(R.layout.myLayout); }