Flex、AIR、Java、Androidなど

2月18日 2009

【Android】スクリーンが回転した時に新たにActivityが再生成されるのを防ぐ

Posted by: tachibana In: Android| プログラミング

あるアプリケーションをスクリーンが縦の状態(G1/Dev Phoneの場合だと閉じている状態)で見ていて、何かの拍子にそのアプリケーション内でキーボードを用いて文字入力をしなければいけなくなることはよくあります。

単純なものでしたらブラウザでのブラウジング中に新たなURLの入力などですが、その際には液晶部分をずらしてキーボードを出現させることが必要になります。

この際、特に処理を記述していないアプリケーションではスクリーンは縦の状態から横向きに自動的に回転され、それに伴いAndroidは現在表示中のActivityが保持している値をリリースし、新たにリソース等から生成しなおすそうです。

これにより私が書いたアプリケーションでは縦向きスクリーンでトップ > メニュー > addまでタップし、開いたdialogのEditTextにフォーカスがある状態にしておいてもキーボードを出した際にActivityはトップ画面(そのActivityのトップです)に戻ってしまうので再びメニュー > addまでタップし直さなければなりません。

これを解消する方法がAvoiding memory leaksに載っていました。

私はポインタをまだやっていないので言葉が合っているかどうか分からないのですが、onCreateでオブジェクトを準備し、setしていくのではなく、setされる値をグローバルかつstaticに定義し、毎回呼ばれるであろうonCreateメソッド内では値ではなく参照を渡しておき、その値がnullの場合はnewし、nullでなければ保持されている値を渡すことでスクリーンの向きが変わる前の状態を復元するような方法をとるようです。

確かに最初からインストールされているアプリケーションではスクリーンの向きが変わってもActivityの状態は変わらないことが多いですし、私が書いたアプリケーションではbackボタンで戻っただけなのにListViewがズラズラと更新されたりということがありました。

まだまだ勉強ですね。

※ちなみに上記リンク先にはグローバルでstatisなフィールドを作りまくると当然メモリは食いますのでそれも考えないといけないとも書いています。

EasyFreeAds Blog News Facebook Twitter Myspace Friendfeed Technorati del.icio.us Digg Google Yahoo Buzz StumbleUpon

Tags:

No Responses to "【Android】スクリーンが回転した時に新たにActivityが再生成されるのを防ぐ"

Comments are closed.

Categories

 

2017年6月
« 4月    
 1234
567891011
12131415161718
19202122232425
2627282930  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here