Android осень 2013 лекция 4

588 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
588
On SlideShare
0
From Embeds
0
Number of Embeds
262
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Android осень 2013 лекция 4

  1. 1. Сетевое взаимодействие.Ad apterViews Лекция №4
  2. 2. Предыдущая лекция  Что такое callable?  Как работает Looper?  Зачем нужен Handler?  Что будет если менять UI из background потока?  Зачем нужен класс AsyncTask?  Что делает метод cancel в AsyncTask? 2
  3. 3. Серверное взаимодействие Server 3
  4. 4. Сокеты Сокеты Server Client Socket Server Socket 4
  5. 5. Polling Server 5
  6. 6. Long-Polling Server 6
  7. 7. Push notifications System Long-polling GCM subscribes App regId Server 7
  8. 8. Варианты взаимодействия HttpUrlConnection Server HttpContext HttpRequest HttpEntity HttpClient HttpResponse Server HttpEntity 8
  9. 9. HttpUrlConnection  Lightweight  Один класс  Прост в использовании  Поддержка всего, что нужно  В поздних версиях gzip из коробки, кеширование, авторизация, IPv6 и проч.  Рекомендован Google  Баги 9
  10. 10. HttpUrlConnection HttpUrlConnection connection = null; try { URL url = new URL("http://example.com"); connection = (HttpUrlConnection) url.openConnection(); 10
  11. 11. HttpUrlConnection HttpUrlConnection connection = null; try { URL url = new URL("http://example.com"); connection = (HttpUrlConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "text/plain"); 11
  12. 12. HttpUrlConnection HttpUrlConnection connection = null; try { URL url = new URL("http://example.com"); connection = (HttpUrlConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "text/plain"); connection.connect(); 12
  13. 13. HttpUrlConnection HttpUrlConnection connection = null; try { URL url = new URL("http://example.com"); connection = (HttpUrlConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "text/plain"); connection.connect(); int statusCode = connection.getResponseCode(); ... readTextFromServer(); } catch (Exception e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } } 13
  14. 14. Apache HttpClient  ООП  ООП  Тяжеловесный – не больше одного экземпляра на приложение  Из коробки не поддерживает многопоточность  Больше не поддерживается 14
  15. 15. HttpClient try { HttpGet request = new HttpGet("http://example.com"); 15
  16. 16. HttpClient try { HttpGet request = new HttpGet("http://example.com"); request.setHeader("Accept", "text/plain"); 16
  17. 17. HttpClient try { HttpGet request = new HttpGet("http://example.com"); request.setHeader("Accept", "text/plain"); HttpResponse response = getHttpClient().execute(request); 17
  18. 18. HttpClient try { HttpGet request = new HttpGet("http://example.com"); request.setHeader("Accept", "text/plain"); HttpResponse response = getHttpClient().execute(request); int statusCode = response.getStatusLine().getStatusCode(); ... return EntityUtils.toString(response.getEntity()); } catch (Exception e) { e.printStackTrace(); } 18
  19. 19. Почувствуйте разницу HttpUrlConnection HttpUrlConnection Server … HttpUrlConnection App HttpContext HttpRequest HttpEntity HttpClient HttpResponse Server HttpEntity App 19
  20. 20. Потокобезопасность 2 1 HttpClient SingleClientConnManager Thread N Connection 20
  21. 21. Потокобезопасность 1 2 HttpClient ThreadSafeClientConnManager Thread N 1 connection 1 2 ... connection N connection 2 21
  22. 22. Потокобезопасность static { ... HttpParams params = new BasicHttpParams(); ConnManagerParams.setMaxTotalConnections(params, 10); ConnManagerParams.setMaxConnectionsPerRoute(params, new ConnPerRoute() { @Override public int getMaxForRoute(HttpRoute route) { return 5; } }); ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(params, schemeRegistry); httpClient = new DefaultHttpClient(cm, params); } 22
  23. 23. Keep-alive Keep-alive cоединение Application request request + ... TCP …+… request request + = traffic Server 23
  24. 24. Keep-alive Номер запроса Время(ms) KeepAlive = false Время(ms) KeepAlive = true 1 2098 2023 2 2157 1604 3 2037 1698 4 2096 1774 5 1944 1173 6 2055 1573 7 1865 1683 8 2119 1670 9 1986 1666 10 1965 1541 ≈2032,2 1700,5 На 16,2% быстрее! 24
  25. 25. Keep-alive duration request1 request2 𝐭 TCP request3 App Server 𝐭𝟑> 𝐝 request4 TCP 𝐭 − 𝐭𝐢𝐦𝐞 𝐝 − 𝐤𝐞𝐞𝐩 𝐚𝐥𝐢𝐯𝐞 𝐝𝐮𝐫𝐚𝐭𝐢𝐨𝐧 25
  26. 26. Keep-alive duration httpClient.setKeepAliveStrategy( new ConnectionKeepAliveStrategy() { @Override public long getKeepAliveDuration(HttpResponse response, HttpContext context){ return KEEP_ALIVE_DURATION_MILLISECONDS; } }); 26
  27. 27. Keep-alive prior Froyo if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO){ System.setProperty("http.keepAlive", "false"); } 27
  28. 28. GZip ... InputStream is = response.getEntity().getContent(); Header contentEncoding = response.getFirstHeader("Content-Encoding"); if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) { is = new GZIPInputStream(is); } ... ... InputStream is = connection.getInputStream(); String contentEncoding = connection.getContentEncoding(); if ("gzip".equalsIgnoreCase(contentEncoding)) { is = new GZIPInputStream(connection.getInputStream()); } ... 28
  29. 29. GZip Не полагайтесь на Content-Length! 29
  30. 30. Https request Application Server Private key Certificate Public key Random symmetric key Checks certificate CA Signs certificate 30
  31. 31. Https  KeyChain API на платформах >= 4.0  < 4.0 – создавать локальное хранилище ключей  Доверять всем сертификатам 31
  32. 32. Utilities  StrictMode  DDMS Network Traffic Tool  Rest-client  Wireshark 32
  33. 33. Adapter pattern 33
  34. 34. ListView 34
  35. 35. Терминология  Childs  Position  Id 35
  36. 36. getView()  Отсюда получаются данные  Здесь оптимизация  Здесь вы выстрелите себе в ногу 36
  37. 37. Recycle Bin 37
  38. 38. Optimization – slow way 38
  39. 39. Optimization – right way 39
  40. 40. Optimization – fast way 40
  41. 41. Optimization 41

×