アプリケーション クラスの使用
初期化で行っていることによっては、拡張する新しいクラスを作成しApplication
、初期化コードをそのクラス内のオーバーライドされたonCreate
メソッドに移動することを検討できます。
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}
アプリケーション クラス内のonCreate
は、アプリケーション全体が作成されたときにのみ呼び出されるため、向きやキーボードの可視性の変更によってアクティビティが再開されることはありません。
このクラスのインスタンスをシングルトンとして公開し、ゲッターとセッターを使用して初期化するアプリケーション変数を公開することをお勧めします。
注: 新しい Application クラスを登録して使用するには、マニフェストで新しい Application クラスの名前を指定する必要があります。
<application
android:name="com.you.yourapp.MyApplicationClass"
構成変更への対応 [更新: これは API 13 以降非推奨です。推奨される代替案を参照してください]
さらに別の方法として、再起動の原因となるイベント (向きやキーボードの可視性の変更など) をアプリケーションでリッスンし、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 レイアウトを新しい向きで強制的に再実行します。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}