Мое приложение вызывает запрос на сервер каждые 0,5 с TCP-соединением, а также подключается к аппаратным средствам управления кнопками управления (с использованием библиотеки jni).android медленнее через несколько дней
Когда приложение запускается, оно запускает TCP-соединение с сервером и поддерживает соединение до тех пор, пока приложение не будет отключено. Каждые 0,5 секунды я отправляю и получаю пакет данных с сервера с помощью AsyncTask. Это код.
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);
}
}
Я использую два обработчик для донжона запрос к серверу и общаться с оборудованиями (получение статуса & управления светодиодным индикатором состояния каждые 1S)
Он отлично работает в течение нескольких дней, но после этого, приложения неожиданно медленно, а иногда кнопки управления продолжают мигать.
У меня нет проблем с памятью, когда я видел журнал памяти. Пожалуйста, дайте мне знать, если у вас есть подозрительные точки или проблемы с верхним кодом.
Привет, не возражаете ли вы добавить, почему вы хотите подключиться к серверу каждые 0,5 сек? – Abbas
Поскольку это приложение работает для монитора и контроллера какого-либо устройства. Если некоторые данные изменены, они должны быть обновлены на экране. – HJPark
Тогда почему бы просто не отправить данные по * когда * что-то изменилось. Вместо этого он постоянно использует ресурсы устройства, когда большую часть времени ничего не изменилось. – Abbas