在Android上重新启动活动

在我的Android应用程序中,当我旋转设备(滑出键盘)时,我的活动将重新启动(onCreate)。现在,这可能是应该的,但我在onCreate方法中进行了很多初始设置,因此我需要:

  1. 将所有初始设置放在另一个功能中,这样就不会在设备旋转或
  2. 使创建时不再调用onCreate,布局只是调整或更改
  3. 将应用程序限制为仅纵向,以便不调用onCreate

使用应用程序类

根据您在初始化过程中所做的,您可以考虑创建一个新的类,该类扩展了应用程序>代码>,并将初始化代码移动到该类中重写的 OnCudio方法。

公共类MyApplicationClass扩展应用程序{
@凌驾
public void onCreate(){
super.onCreate();
//TODO将应用程序初始化代码放在此处。
}
}

application类中的onCreate仅在创建整个应用程序时才被调用,因此活动在方向或键盘可见性更改时重新启动不会触发它

将这个类的实例作为一个单例公开,并使用getter和setter公开正在初始化的应用程序变量,这是一个很好的实践

注意:您需要在清单中指定要注册和使用的新应用程序类的名称:

<应用
android:name=“com.you.yourapp.MyApplicationClass”

对配置更改作出反应[更新:这是自API 13以来被弃用的;请参阅推荐的替代方案]

作为另一种选择,您可以让应用程序侦听可能导致重新启动的事件(如方向和键盘可见性更改),并在活动中处理这些事件

首先将android:configChanges节点添加到活动的清单节点

<活动android:name=“.MyActivity”
android:configChanges=“方向|键盘隐藏”
android:label=“@string/app_name”>

或者对于Android 3.2(API级别13)及更新版本:

<活动android:name=“.MyActivity”
android:configChanges=“键盘隐藏|方向|屏幕大小”
android:label=“@string/app_name”>

然后在活动中覆盖onConfigurationChanged方法,并调用setContentView以强制在新方向上重新完成GUI布局

@覆盖
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}

发表评论