Как насчет:
ObjectAnimator animator=ObjectAnimator.ofInt(yourHorizontalScrollView, "scrollX",targetXScroll );
animator.setDuration(800);
animator.start();
Что ж, лучший способ узнать, прервано ли ваше соединение, - это попытаться читать / писать из сокета. Если операция не удалась, значит, вы когда-нибудь потеряли соединение.
Итак, все, что вам нужно сделать, это попытаться прочитать через некоторый интервал, а если чтение не удастся, попробуйте повторно подключиться.
Важными событиями для вас будут, когда ошибка чтения - вы потеряли соединение, а при подключении нового сокета вы восстановили соединение.
Таким образом вы можете отслеживать время работы и время простоя.
Несмотря на то, что TCP / IP является протоколом, ориентированным на соединение, обычно данные не передаются через незанятое соединение. Вы можете держать сокет открытым в течение года, и стек IP-адресов не отправит через него ни одного бита. Чтобы заметить, что соединение потеряно, вы должны отправить некоторые данные на уровне приложения. (*) Вы можете попробовать это, отсоединив телефонный кабель от модема ADSL. Все соединения на вашем ПК должны оставаться активными, если только приложения не имеют какого-либо механизма поддержки активности на уровне приложений.
Таким образом, единственный способ заметить потерю соединения - открыть TCP-соединение с некоторым сервером и прочитать с него некоторые данные. Возможно, самым простым способом было бы подключиться к какому-либо FTP-серверу и время от времени получать небольшой файл или список каталогов. Я никогда не видел универсального сервера, который действительно предназначался для этого случая,
Почему бы не использовать isReachable ()
метода java.net.InetAddress
?
Как это работает, зависит от реализации JVM, но:
Типичная реализация будет использовать ICMP ECHO REQUEST, если привилегия может быть получен, иначе он попытается установить TCP-соединение на порт 7 (Echo) целевого хоста.
Если вы хотите, чтобы соединение постоянно оставалось открытым, чтобы вы могли видеть, когда это не удается, вы можете подключиться к серверу, на котором работает протокол ECHO самостоятельно, вместо того, чтобы делать это для isReachable ()
вы читаете и записываете данные и ждете отказа.
Итак, я наконец-то заставил его работать с
try
{
Socket s = new Socket("stackoverflow.com",80);
DataOutputStream os = new DataOutputStream(s.getOutputStream());
DataInputStream is = new DataInputStream(s.getInputStream());
while (true)
{
os.writeBytes("GET /index.html HTTP/1.0\n\n");
is.available();
Thread.sleep(1000);
}
}
catch (IOException e)
{
System.out.println("connection probably lost");
e.printStackTrace();
}
Не так чисто, как я надеялся, но он не работает, если я оставлю os.writeBytes ().
Вы можете попробовать посмотреть интервал тайм-аута сокета . С коротким таймаутом (я полагаю по умолчанию - «бесконечный тайм-аут»), вы можете перехватить исключение или что-то еще, когда хост становится недоступным.
Вы можете пинговать машину каждые несколько секунд, и это будет довольно точно. Будьте осторожны, не используйте DOS.
Другой альтернативой может быть запуск небольшого сервера на удаленном компьютере и сохранение соединения с ним.
Возможно, проще подключиться к Yahoo / Google или где-нибудь в этом роде.
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
int dataLen = yc.getContentLength() ;
Нил