티스토리 뷰
1. Problem
위와같이 코드를 짰는데 뭔가 이상했다.
일반적인(?), 내 의도대로라면, Log가 log 1~8까지 차례대로 찍혀나가야 했는데 결과를 보니 그렇지 않았다.
아래처럼 onResponse()/onFailure() callback이 가장 나중에 call 되더라.
생각해보면 Callback method를 이용한 asynchronous한 처리이기 때문에 당연한 일이다.
한마디로 main thread는 결과를 기다리지 않고 제 갈길을 계속 가는 거다.
그런데 나는 server로부터 return되는 response값에 따라 다른 처리가 필요했기에
완전히 synchronous하게 처리해야 했다.
2. Solution
: 찾아보니까 retrofit은 동기/비동기 처리를 모두 지원한다고 한다.
(참고: retrofit2부터는 service interface에서는 둘다 Call을 return받는 것으로 바뀌어서 차이가 없고,
다른 method를 쓰도록 된 것 같다.)
그런데 android에서는 network처리를 '작업 thread'에서만 처리할 수 있도록 예전에 바뀌었기 때문에
동기식으로 처리한다고 해도, 또 다른 thread에서 돌려야 했고, 내가 원하는 타이밍에 network처리를 하고,
그 결과 값을 return받아서 사용하는 건 똑같이 순서가 뒤죽박죽이었다.
(비동기처리와 마찬가지로)
그래서 내린 결론은 임의로 타이밍을 맞춰주는 것이다.
그래서 Thread.sleep(1000);으로 1초를 기다리고 처리를 했더니,
그동안 network처리 시간이 충분했는지, return값을 받고, 내가 원하는 방향으로 처리할 수 있었다.
3. 느낀점 / 배운점
: 내가 원하는대로 구현은 가능했지만, 실제로 현업에서도 login을 이런식으로 network를 구현하는지는 알아봐야 할 일이며, retrofit이 빠르고 편리하지만, 무조건 장점만 있는 건 또 아닌것 같다.
'개발자 배배 > Android' 카테고리의 다른 글
[Beacon] 2. Beacon 기술조사 (0) | 2017.02.04 |
---|---|
[Beacon] 1. 모니터링 시스템 전체 기획 (0) | 2017.02.04 |
[Android] 안드로이드 폰에서 db파일 접근하기 (SQLite) (0) | 2016.08.04 |
[Android] 안드로이드 카카오톡 연동 - (3). 로그인 연동 (7) | 2016.06.02 |
[Android] 안드로이드 카카오톡 연동 - (2). Gradle 설정 (0) | 2016.06.02 |
- Total
- Today
- Yesterday
- 카톡
- 수업교재
- KAKAO
- 연동
- server ip
- wegith
- Android
- 카카오톡 연동
- layout_weight
- kakao oven
- RECO beacon
- fragment 겹침
- call back 뺏아오기
- monitoring
- 카카오톡
- Beacon
- call back
- 비콘
- stopService
- startService
- eddystone
- 행복의 상대성
- ranging
- Retrofit
- 안드로이드
- tabLayout
- kakaotalk
- nodejs
- 책 집필
- SQLPro
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |