Android:Dialogとメモリ解放後の起動

Androidの2.xでDialogを使うとき、onCreateDialog()をオーバーライドして作成するのが正しいやり方っぽい。

その機構を使うことでDialogのリソース管理をActivityが行なってくれるようになり、アプリ側ではその解放処理を考える必要が無くなるからだ。

解放処理以外にも、例えば、ボタンがタップされた時にダイアログを開くとした時、自前でDialog#show()すると、連打された時、その分ダイアログが開いてしまうが、Activity#showDialog()の機構を利用すると、以前のDialogを閉じてから開いてくれるなど、排他処理も行なっている。


そして、Activity#removeDialog()というものがあって、それは管理しているDialogのリソースを解放してくれるらしいのだが、ここでワナ発見。

アプリが復帰する時、ダイアログは閉じておきたいと思い、Activity#onPause()でActivity#removeDialog()してみた。
しかしながら恐ろしいことに、メモリクリア後にアプリを再開しようとした時、Androidったら、表示する必要のないはずのダイアログをActivity#onCreateDialog()で作成しに行くじゃありませんか。


・・・と思ったら、Android4.0だけかもしれない。
手元のAndroid2.3.5端末ではonCreateDialogを呼んでいないようだ。。


どちらにしても、Activity#onCreateDialog内の処理も、「メモリクリア後の再開」を考慮しておかなくちゃなのね・・・

コメント

このブログの人気の投稿

nginxでlocalhostとしてアクセスをサーバーに転送する方法

Android・・・テキスト描画あれこれ, ascent(), descent()等

Android:stateに応じて切り替わるdrawable・・・StateListDrawable