Android 轮流重启 Activity

2024-01-10

在我的 Android 应用程序中,当我旋转设备(滑出键盘)时,我的Activity已重新启动(onCreate叫做)。现在,这可能就是应该的样子,但我在中做了很多初始设置onCreate方法,所以我需要:

  1. 将所有初始设置放在另一个函数中,这样它就不会在设备旋转或
  2. 就这样吧onCreate不会再次调用,布局只是调整或
  3. 将应用程序限制为仅纵向,以便onCreate不被调用。

使用应用程序类

根据您在初始化中所做的事情,您可以考虑创建一个扩展的新类Application并将您的初始化代码移至重写的onCreate该类中的方法。

科特林版本

class MyApplicationClass: Application {
    @override fun onCreate() {
        super.onCreate()
        // Put your application initialization code here
    }
}

Java版本

public class MyApplicationClass extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // Put your application initialization code here
    }
}

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

最好将此类的实例公开为单例,并公开使用 getter 和 setter 初始化的应用程序变量。

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

<application
    android:name="com.you.yourapp.MyApplicationClass"

对配置更改做出反应

更新:自 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">

Or for Android 3.2(API 级别 13)及更高版本 https://stackoverflow.com/a/9550231/2291:

<activity android:name=".MyActivity"
      android:configChanges="keyboardHidden|orientation|screenSize"
      android:label="@string/app_name">

然后在 Activity 中覆盖onConfigurationChanged方法和调用setContentView强制 GUI 布局在新方向上重新完成。

科特林版本

@override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    setContentView(R.layout.myLayout)
}

Java版本

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.myLayout);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 轮流重启 Activity 的相关文章

随机推荐