私のアプリは、TCP接続で0.5秒ごとにサーバーにリクエストを呼び出し、ledボタンを制御するためのハードウェア(jniライブラリを使用)に接続しています。数日後にアンドロイドが遅くなる
アプリを起動すると、サーバーとのTCP接続が開始され、アプリがオフになるまで接続が維持されます。 0.5秒ごと私はAsyncTaskを使ってサーバーからデータパケットを送受信しました。 これはコードです。私は、サーバーに要求し、ハードウェアと通信キープするための2つのハンドラを使用しています
private class RequestToServer extends AsyncTask<byte[],Void,byte[]> {
String dstAddress = "192.168.1.197";
int dstPort = 8000;
String response = "";
@Override
protected byte[] doInBackground(byte[]... params) {
if(mSocket == null || !mSocket.isConnected()){
mSocket = new Socket();
InetSocketAddress socketAddress = new InetSocketAddress(dstAddress, dstPort);
try{
mSocket.setSoTimeout(3000);
mSocket.connect(socketAddress,5000);
}catch (SocketException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
try {
dataOutputStream = new DataOutputStream(mSocket.getOutputStream());
dataInputStream = new DataInputStream(mSocket.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i(TAG, "Connection Generated");
}else{
Log.i(TAG, "Connection Alive");
}
byte[] result = null;
try {
byte[] buffer = new byte[2048];
if(mSocket.isConnected()){
dataOutputStream.write(params[0]);
Log.i(TAG,"send data : "+params[0]);
}
int bytesRead;
if((bytesRead = dataInputStream.read(buffer)) != -1){
Log.i(TAG,"bytesRead size: "+bytesRead);
result = new byte[bytesRead];
result = Arrays.copyOfRange(buffer,0,bytesRead);
buffer = null;
Log.i(TAG,"data received~ : "+result);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response = "UnknownHostException: " + e.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
return result;
}
@Override
protected void onPostExecute(byte[] s) {
super.onPostExecute(s);
}
}
それは数日間が、その後正常に動作しますが、アプリケーションが突然れる(その状態&を主導した状態ごとに1秒を制御取得)遅くなったり、時にはボタンが点滅し続けることがあります。
メモリログを見たときにメモリに問題はありません。 疑問点や上位コードに問題がある場合は、教えてください。
こんにちは、なぜ0.5秒ごとにサーバーに接続したいのですか? – Abbas
このアプリは一部のデバイスのモニターとコントローラーで動作するため、一部のデータが変更された場合は、画面上で更新する必要があります。 – HJPark
それから、*何かが変更されたときに単に*データを送信しないでください。ほとんどの場合、何も変わっていないときは常にデバイスのリソースを利用しています。 – Abbas