使用应用程序类
根据您在初始化中所做的事情,您可以考虑创建一个扩展的新类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);
}