アクティビティと言語変更。

Android端末でアプリケーションを開いた後、「戻る」ボタンを押したときの基本的な動作は以下の 2つに分けられます。

  • 起動元アクティビティがある場合、現在のアクティビティを破棄して元のアクティビティを再表示する
  • 起動元アクティビティが無い場合(現在のアクティビティが開始アクティビティの場合)、アプリケーションを閉じる

で、後者の場合に「アプリケーションを閉じる」と表現しているけど、実際にはアプリケーションがメモリから即座に解放されるのではなくって、しばらくの間は状態が保持されるようになっています。アプリケーションを再び起動したときに、閉じる前の状態を保存していることも多いし…ね。

でも、それを言い換えれば、アプリケーションを閉じたときに Activityインスタンスは GCに入れられるのではなく、また再び起動する際には Activityインスタンスの初期化処理および onCreateメソッドを実行していない、ということでもあります。

 

アプリケーションを起動して閉じる。その後、端末設定から言語を他言語(例えば日本語から英語)に変える。そして、再びそのアプリケーションを起動した場合、先の動作が悪影響することはあります。具体的には、

  1. Activityの static final String型メンバにリソース文字列を初期値で指定しているような場合
  2. ActivityのonCreateメソッドで、スピナに必要な文字列を登録している場合

前者は Activityを使い回しているために、後者は onCreateメソッドが実行されないために、それぞれ変更前の言語の文字列が表示されることがあります。

設定言語をころころ変える人はそんなにいないから問題ないのだろうけど、ちょっとどう対応して良いものか困っています。