Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java Мобильная разработка (Android)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2015, 04:30   #1
D][mon
Форумчанин
 
Регистрация: 05.01.2010
Сообщений: 150
По умолчанию Android: Передча маленьких порций данных с маленьким интервалом по сети

Доброго времени суток.
Мне нужно отправлять данные с сенсора на ПК по локальной сети.
Я сделал код (Java) (см. ниже) и он работает,
но(!) после передачи ~10 порций происходит неприемлемая пауза в 2-5 секунды.

есть подозрение, что это из-за большого количества создаваемых потоков, но как этого избежать не имею понятия.

Кстати,
Сервером является Unity3D(C#) приложение. принимает данные при помощи TcpListener, работающем в BackgroundWorker. Если проблема в нем, как это проверить?

Код:
SensorEventListener listenerAccel = new SensorEventListener() {
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
        MyThread mythread;
        float v0;
        float v1;
        float v2;
        @Override
        public void onSensorChanged(SensorEvent event) {
            if(v0 - event.values[0] < 0.1 && v1 - event.values[1] < 0.1 && v2 - event.values[2] < 0.1) return;
            if(mythread ==null){
                mythread = new MyThread(event);
                mythread.start();
            } else if(mythread !=null && mythread.getState() == Thread.State.TERMINATED) {
                mythread = new MyThread(event);
                mythread.start();
            }
        }
    };
Код:
class MyThread extends Thread{
    public MyThread(SensorEvent event){
        _event = event;
    }
    SensorEvent _event;

    boolean buisy;
    public boolean isBuisy(){
        return buisy;
    }
    @Override
    public void run(){
        buisy = true;
        float[] v = _event.values;

        TcpClient cl = new TcpClient();

        byte[] arr = new byte[4];
        arr[0] = 2;
        arr[1] = (byte)(v[0]*10);
        arr[2] = (byte)(v[1]*10);
        arr[3] = (byte)(v[2]*10);

        try {
            System.out.println(v[0]);
            cl.send(MainActivity.host, MainActivity.port, arr);
            cl.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            buisy = false;
        }
    }

}
Код:
public class TcpClient {
    Socket socket;

    public void send(String host, int port,byte[] data ) throws IOException {
            socket = new Socket(host, port);
            socket.getOutputStream().write(data);
    }
    public void close() throws IOException {
            socket.close();
    }
}
D][mon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отправка данных с сервера на android sinestro Мобильные ОС (Android, iOS, Windows Phone) 3 13.04.2015 16:10
MediaPLayer с интервалом TUberwer Мультимедиа в Delphi 2 28.08.2013 15:46
Ускорить импорт данных из xml в sqlite.(android) Zohei Общие вопросы по Java, Java SE, Kotlin 2 11.11.2012 12:02
Передча строки из OCX на Delphi в VB Didim Помощь студентам 2 02.12.2011 22:08
Таймер с интервалом!!! maratos Помощь студентам 1 07.05.2011 02:32