3

多くのJavaMEチュートリアルでは、オブジェクトの作成と初期化にstartApp()メソッドを使用しており、コンストラクターは空白のままになっています。ただし、startApp()メソッドは、MIDletが一時停止状態から再開したときにも呼び出されます。これにより、すべてのオブジェクトが再初期化され、加えられた変更はすべて失われます。

また、netbeans IDEは、自動生成されたコードで、startApp()で多くのif(object == null)ステートメントを使用して、オブジェクトが以前に作成されたかどうかを確認していることに気付きました。

コンストラクター自体ですべてのオブジェクトの作成と初期化を単純に行うのは意味がありませんか?これを行わない理由はありますか?

4

1 に答える 1

3

これは、MIDPスレッドモデルを理解することに関する部分です。

MIDletコンストラクターが呼び出されるスレッドは、電話でJava仮想マシンを開発したユーザーによって異なります。

開発者は、MIDP仕様がその領域で述べていること、つまりstartApp、pauseApp、およびlcduiイベント処理の動作にのみ依存する傾向があります。

ただし、これが重要な場合はごくわずかです。

この問題の2番目の側面は、MIDletが一時停止されたときに、ソフトウェア開発者ができるだけ多くのリソース(メモリ、ファイルハンドル、ソケットなど)を解放しようとすることです。

繰り返しになりますが、MIDletが一時停止している場合でも一部のリソースを保持する必要がある場合がありますが、そのような動作をコーディングするときは、実際に何をしているのかを考える必要があります(そして何気なく理解する必要があります)。

一部の電話は常にJVMプロセスを実行し続けることも覚えておく価値があります。(J2MEの世界では通常のように)クラスのアンロードをサポートしないJVMもある場合、これは、MIDletが完全に破棄された後でも静的変数がメモリに残る可能性があることを意味します。

于 2010-03-03T12:01:33.600 に答える