なんだかんだで画像受信出来るようなのが出来上がったので、Android端末に転送&実行!
すると動いた。動いたけど・・・
めちゃめちゃ遅いやん。秒間1フレームも無いような・・・?
実機(IS01)でも試してみましたが状況変わらず。
ログを見ると1フレーム更新するのに3秒かかってました。
なんでだ~ということでプロファイルを取得してみると、
JPEGイメージを連続して送っているので展開とガベージコレクトで処理遅くなっているのかと思いきや、ほぼネットワーク部分でつまっている模様。
パケットキャプチャで通信内容もみてみると、
パケットそのものは送信&受信済みのように見えます。
受け取った後の処理がまずいのか・・・ともう一度プロファイルとソースコードを見比べると、、、
あ!?
//データ本体を受信
byte[] byteData = new byte[size];
for(int i=0; i<size; i++){
byteData[i] = din.readByte();
}
受け取ったパケットの中身を1byte毎に取り出してました。テスト用クライアントはこれで問題なく動いてたのは、多分PCのマシンスペックで強引にカバーしていたのでしょう。
このあたりを修正するとそこそこ見れるパラパラ画像になってきました。
もうちょい、もうちょい。
--------------------------------------------------------------------------------
VMWare上のAndroidへのadb接続メモ
- AndroidのIPアドレス確認(Terminalでnetcfgコマンド)
- ホストOS側から
$ adb (Android IPアドレス)
これでEclipse上からもAndoird端末が認識出来ています。Androidエミュレータは猛烈に重い(うちのPCが非力?)ので、結構助かります。
また、Androidアプリでネットワーク通信する場合は、プロジェクト内AndroidManifest.xmlに以下の項目追加。
<uses-permission android:name="android.permission.INTERNET"/>
これでSocket接続出来るようになる模様。