まず、このブログでは、以下のニュース
KDDI研究所、BREWでマルチウィンドウを実現するミドルウェア
http://k-tai.impress.co.jp/cda/article/news_toppage/31341.html
について、取り上げるのであって、菅山かおる選手について、書くわけではありません。
検索エンジンで、菅山かおる選手についてしらべたら、きてしまった人は、本家のほうに、カオル姫ネタを書いておきました(このリンク先)ので、そちらのほうで、こたんのーくださいませ。
とお断りしたところで、本題。
KDDI研究所が、BREWでのマルチウィンドウ処理を行うミドルウェアを開発したそうだ。上記ニュースにも書かれているし、以下のプレスリリースにも書かれている。
BREW携帯電話向けのマルチウィンドウシステム
http://www.kddilabs.jp/pr_pdf/20061005KTAIWIN.pdf
で、ここで問題になるのは、
・複数のアプリが立ち上げられるからマルチウィンドウになるのか?
・それとも、1つのアプリで、いくつものウィンドウが立ち上げられるのか?
ということだろう。
もし、後者だとすると、(ウィリアムのいたずらは、個人であり、法人でないので、この辺の情報はさっぱり入ってこないので、これがどんなもんだか、よくわからない)ちょっと考えると、以下の問題が出てくる。
・複数のウィンドウを、同時に立ち上げることができるとしたら、どのウィンドウ
にフォーカスが当たっているときでも、他のウィンドウに対して、
・データの操作ができて、
・画面のリドロー、
・フォーカスを当て、
・カーソル移動ができないといけない。
そうしないと、描画ソフトのように、いくつもパレット(色とか、筆の太さとかを指定する、メインダイアログ以外のダイアログ)があるとき、パレットが入力されたら(フォーカスはパレットにある)それにもとずいて、描画内容を変えたり、メインウィンドウにフォーカスをもっていったりすることができない。
・複数のウィンドウが立ち上がっている状態で、あるウィンドウで終了指示が出されたら、すべてのウィンドウを閉じ、メモリを開放するという可能性もある(複数文書を立ち上げていて、プログラム終了された場合)
もし、仮に、こういう問題が起こったとしたら、どうするかだが、これは、JAVAなら、簡単に解決できる。ハッシュマップに全部のウィンドウの情報を入れておいて(ウィンドウに名前をつけて管理しておく)必要なときに、ウィンドウの名前をもとに、ウィンドウ情報をGetして、値を設定、リドローする。プログラムを抜ければ、ハッシュマップが、自動的にメモリを解放してくれる。
ではBREWは?
おなじように、ハッシュマップ相当のものを作って、そいつにウィンドウ名と、ウィンドウ情報を入れればいい。で、どの画面にいくときも、そのハッシュマップ相当を持っていけば、すべての画面を、ハッシュマップから取り出し、操作できる。
さらに、そのハッシュマップに入っているデータは、そのハッシュマップをReleaseすると、解放されるようにしておけば、どこの画面で終了したとしても、そのハッシュマップさえ解放すれば、すべての画面データを確実に解放できる。
これを実現するのが、カオル姫方式で、IKHMapというマップをつくって、このマップに、キーワードと値をいれておく。値は、画面でも、テキストでもOK!で、アプリが終了するとき、いっぺんに返す。もちろん、必要がなくなったら、その時点で、IKHMAP_Release(ハッシュマップ、"キーワード")で、解放できる。
実際には、はじめに、文字列だけのIKHMapを紹介して、その後、そういう画面とかでもできるように拡張するんだけど、最終的には、カオル姫方式で、こんなことができる。
そんなカオル姫方式をもうじき、紹介します(その前に、もうひとつのメリットを書きます)