2011-02-26 14 views
0

私はアンドロイドアプリと彗星様式のコミュニケーションを使います。私がGingerbread(Emulator、CyanogenMod 7)を使うまで、それはうまくいった。私が持っている問題は、私は、サーバーからのイベントを送信した場合NIO selector.select()は、Android 2.3以降のlong poll HTTPで正しく動作していませんか?

Selector selector = Selector.open(); 
channel.configureBlocking(false); 
channel.connect(socketAddress); 
channel.socket().setKeepAlive(true); 
channel.register(selector, SelectionKey.OP_CONNECT | SelectionKey.OP_READ); 

if(selector.select() > 0){ 
//DO STUFF 
} 

selector.select()>0 

が真を返したが、今ではそれを無視していることです。 Android 1.6 - 2.2で全く同じコードが動作する

私はこれがバグだと思っています...誰かが同じ問題を確認することができますか?

答えて

1

私は解決策を見つけましたが、なぜそれが以前に働いたのかはわかりません。

channel.register(selector, SelectionKey.OP_CONNECT | SelectionKey.OP_READ); 

はもう動作しません。

私はOP_READだけを扱う別のセレクタを登録しなければなりませんでしたが、今は動作します。

channel.register(readSelector, SelectionKey.OP_READ); 
channel.register(connectSelector, SelectionKey.OP_CONNECT); 

if(connectSelector.select() > 0){ 
    //Do connect stuff 
} else if(readSelector.select() > 0){ 
    //Do read stuff 
} 

これはいくつかの頭痛を救うことを望む。

EDIT: http://code.google.com/p/android/issues/detail?id=15055

私はアンドロイドissuetracker上の問題として、それを投稿し、それは私が同様の問題に遭遇してきた

0

調査中です。私が何かを送信しようとすると、セレクタはブロックモードから抜け出せません。だから、私はネットワークパケットを受信するだけで、何も送信することはできません。私はこれを打ち、あなたに知らせるでしょう。私はネクサス1でアンドロイド2.3.3を実行しています。

+0

はい、私は2つの異なるセレクタに分割することができます。少しでも痛みはありますが、少なくとも今はうまくいきます。 – Mlove

関連する問題