J2ME MIDlet SuiteとHttpConnectionが異なるスレッドにある必要がある理由
-
11-12-2019 - |
質問
J2ME MIDletからサーブレットを呼び出したいので、サーブレットURLのHTTPConnectionコードを呼び出してGETメソッドを呼び出しました。
MIDletスイートがサーブレットのURLに接続しようとしたら、以下のメッセージをエミュレータに入っています、
{#MyMidlet} Midlet Suite wants to connect to {#Servlet URL} using air time,
this may result in charges, Is it ok to use airtime ?
.
NoまたはYESをクリックすると、何も起こらなかったら、絞首刑になっただけです。そしてコンソールに警告がありました、
Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
.
これは、httpConnectionを別のスレッドにすると、問題が解決されますか?
解決
私がhttpconnectionを別のスレッドにした場合、問題は解決されますか?
あなたが正しくするなら - はい、問題は解決されます。これは典型的な問題であり、標準的な解決策があります。
警告MIDletの設計上の問題を示しています。 UIと同じスレッドで実行され、それをブロックして無反応にする「ヘビー級」アクティビティ(HTTP接続)があります。
UIイベントスレッドで負荷が大きくないようにします。
commandAction
またはkeyPressed
またはpointerPressed
などの中に何かをすることがたくさんある場合は、それをするために新しいスレッドを生成するだけです。なぜ理解するために、そのような方法でそれを実行する方法を調べるためにこのチュートリアルを検討することを検討する:
ネットワーキング、ユーザーエクスペリエンス、およびスレッド この記事では、あなたのMIDletがあなたのユーザーインターフェースを犠牲にすることなくネットワーク接続をすることができる方法について説明します。マルチスレッドネットワーキングと待機画面の使用を説明する6つの反復例が含まれています...
- チュートリアル(
PrimitiveMidlet
)の最初の例の後、あなたが経験している問題の詳細な説明さえあります:
...プログラマは彼自身の長さの処理のためのシステムスレッドをハイジャックしました。システムは、ユーザーがコマンドを選択したときにcommandaction()メソッドを呼び出します。このメソッドを呼び出すスレッドは、開発者にはなく、システムに属します。メソッドが迅速に実行されている場合、これは犯罪にはなりませんが、この場合、ネットワーク接続はシステムのスレッドを長時間獲得することがあります。
J2SEアプリケーションプログラミングでもサーブレットプログラミングでも、システムはあなたのためのスレッドを作成し、あなたの処理がどのくらいの時間がかかるかについての制限があります。 MIDletスレッドのルールはシンプルで厳格です。あなたに属する唯一のスレッドはあなたが自分自身を作成するものです。
MIDletでは、システムが自分のスレッドの1つから呼び出すコードを書いています。 midletのstartapp()、pauseapp()、destroyapp()、およびイベントハンドラメソッドが呼び出されたとき、それらはシステムスレッド内で実行されます。システムスレッドが他の作業を続けることができるように、あなたのメソッドは素早く返さなければなりません。すぐに完了できないタスクは、システムのスレッドから移動する必要があります。
このプログラミングのスタイルは、システムのスレッドから呼び出されるコードのみを書くだけであるので、このスタイルに慣れることがあります。ただし、他のGUIプログラミングを完了した場合は、このテクニックはおなじみになります。 AWTとSwingには、オペレーティングシステムのイベントを処理し、コード内のイベントハンドラを呼び出すイベントディスパッチスレッドがあります。ルールは同じです。イベントハンドラは、イベントディスパッチスレッドの残りの部分がロックアップされないように、イベントディスパッチスレッドにコントロールを実行する必要があります。 チュートリアルのさらなるコード例は、上記のようなデザイン間違いを修正する方法と、MIDletユーザーインターフェイスをネットワーキング活動とスムーズに相互運用する方法を示しています。
他のヒント
は、そのような個別のスレッドとして接続を作成します。
Thread myConnection = new Thread(new Runnable() {
public void run() {
// TODO open connection here
HttpConnection conn = null;
try {
conn = (HttpConnection) Connector.open(serverURL,
Connector.READ_WRITE, true);
conn.setRequestMethod(HttpConnection.GET); // or POST method
} catch (Exception e) {
// TODO: handle exception
} finally {
// close connection here
}
}
});
myConnection.start();
.
J2MEでは、ネットワーク操作が分離されたスレッドに入れられます。
U Networkingモジュールを別にスレッドに入れます.Uneperateスレッドにネットワークモジュールを置くと、次のメッセージが表示されません。
Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
.
J2ME(J2MEの所有者であるSun / Oracle)はいくつかの制限を与えます。セキュリティでは、信頼できるパーティー証明書が必要です。このMobilesの場合、ユーザーがユーザーをクリックするとユーザーが表示されますので許可されます。そうでなければそれは許可されません。
次に、そのシナリオの下にあるAPIの一部が含まれています(ファイルへの読み書き/書き込み)API、HttpConnection、HTTPSConnectionなどです。
U URデバイスがサポートされているかどうかをチェックするCertificate.IFはサポートです。
信頼できるパーティー証明書は高価です。最小コストは年間Ruppees 10000です。以下は、信頼できるパーティーベンダーザワ、ベライゾン、セマンテックなどです。