続・Activity切り替え

カメラアプリには必須っぽいActivity切り替え。
そこにも、まだまだ罠が潜んでいた。

今自作しているアプリは、独自フレームワークを使っている。
Activityを継承したフレームワーククラスを作り、なるべく共通な要素をそこで処理し、
ゲーム毎に行うべき処理を、ゲームのメインクラスとして定義し、
フレームワークでインスタンスを生成している。

がActivityを継承したフレームワークは、そもそもActivity切り替えなぞ考えてない設計だった。
Activityを切り替えるたびに、この初期化部分が呼び出される。

レイアウトを作り変えるのが、切り替えの目的だから、毎回初期化部分が呼び出されないと困るわけだが、
その他の初期化部分は、なるべく一度しか処理されないようにしなければならない。

まあ、タッチライブラリの初期化、など、各種ユーティリティの初期化しか行ってないので、基本問題は無い。
と思いきや、ゲームクラスの初期化に問題があった。

シングルトン形式で、インスタンスを1つしか生成しないようにしているため、2回目以降の初期化(生成処理)は通過しない。
この初期化の中で、

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

これで、画面を横方向に固定している。
どちらの画面方向を使うかは、ゲームによって異なるので、フレームワークには入れなかった。

しかし、この処理は、毎回必要らしい。


初回起動・フレームワーク初期化、ゲームクラス初期化
 ↓
別のActivity切り替え
 ↓
元のActivityに戻る
 ↓
フレームワーク初期化・ゲームクラスはインスタンスがあるため、初期化スルー

とすると、画面設定が、任意方向可に戻るのだ。
面倒だのう。

あと、もう1つ。
これは、アプリ制作では、周知の事実だけど、Activity切り替え(View切り替え)を使うと、顕在化する。

AndroidOSにある、1つ戻るボタン(機能)。
これは、ホーム画面に戻る、ではなく、1つ前のVIEWに戻る、という機能なんだな。

ゲームで1つのVIEWしか使って無いと、ゲーム中に1つ戻ることで、ホーム画面に戻る。
が、Activity切り替えを導入し、一度切り替えると…。

1つ戻るボタンでは、永久に、アプリは終わらなくなる…。
[PR]
by miries | 2015-01-25 10:16 | Android


<< カメラのカラーエフェクトのバグ カメラとActivity切り替え >>