Android に画像を送信し、この画像を画像ビューに設定する接続をリッスンしようとしています。
このプロセスは、プッシュ コンテンツの動作をシミュレートするために自動的に実行する必要があります。
このコードは TCPConHandler クラスにあります
public void listenForIncomingImageFlag() {
new Thread(new Runnable() {
@Override
public void run() {
try {
FlagScan = new Scanner(mySocket.getInputStream());
while (true) {
Flag = FlagScan.nextInt();
Log.d("FLagImage", "Flag ="+Flag);
if (Flag == 1) {
listenForIncomingImage(true);
Flag = 0;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
TCP 接続を実行しているスレッドがソケットを返すとすぐに、この関数が呼び出されます。次に、listenForIncomingImage という別の関数を開始します。
public void listenForIncomingImage(boolean b) {
check = b;
Thread InComImage = new Thread(new Runnable() {
@Override
public void run() {
try {
inComImageBitmap = BitmapFactory.decodeStream(mySocket
.getInputStream());
MainActivity.setImage(inComImageBitmap, true);
check = false;
Log.d("Bitmap", "Bitmap receviced and sent to method");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
InComImage.start();
}
runOnUiThread を使用している場合、mainactivity の imageUpdate 関数に画像を渡すようになりました。非静的メソッドを呼び出すとエラーが発生します。
public void imageUpdate() {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
runOnUiThread(new Runnable() {
public void run() {
while(imageCheck == true){
myImage.setImageBitmap(finalImage);
imageCheck = false;}
}
});
}
}
}).start();
}
そのため、メインアクティビティのときにこのスレッドを開始し、ビットマップを受信したときに tcpConHandler クラスから送信される imagecheck ブール値を使用して何らかの方法でブロックする必要がありました。
そのようなことを行うと、アプリがメモリを過負荷にしてクラッシュし、 Android でコンテンツのプッシュ動作をシミュレートするより良い方法があります。
また、UIを更新して静的にすることができるwhile(true)ブロックを内部に持つスレッドを実行するmainactivityに関数を持たせる方法はありますか?. または同様の実装。