[Android] 제대로 된 REST API 를 구축해보자. |
reference : http://mytechaddiction.blogspot.kr/2014/02/rest-interaction-in-android.html?utm_source=Android+Weekly&utm_campaign=4254f212fb-Android_Weekly_91&utm_medium=email&utm_term=0_4eb677ad19-4254f212fb-337262377
Anti-Patterns
1. UI Thread 에서 API Call.
2. Activity 나 Fragment 등에서 Thread 를 만들어 요청
3. 결과를 Memory 에만 저장하여 사용.
Decouple the UI from the http call.
Activity 가 죽을 수 있다.
Config change 가 발생할 수 있다.
Request 를 schedule 할 수 없다.
Test 하기 어렵다.
해결책으로, Service 에 bind 하여 사용하라.
장점
background 에서 작업할 수 있다.
schedule 될 수 있다.
단점
따로 shut down 이 되어야 한다.
다른 thread에서 작업하는 코드가 추가되어야 한다.
일반 Service 의 문제 해결을 위해 IntentService 를 사용해보자.
다른 thread 에서 자동 작업된다.
onHandleIntent 가 return 되면 service 가 자동으로 죽는다.
자동으로 queue 가 된다.
command pattern 이 사용된다.
Save data not only on the memory but on the persistent storage as well.
같은 정보를 또 load 하는것은 cost 가 크다.
prefetch 를 통해 persistent storage 에 저장하면, offline 에서의 그나마 최신 정보로의 접속이 가능하다.
Persistent storage 를 위해
Transaction에서 yieldIfContendedSafely() 를 사용하거나, bulkInsert() 를 사용하자.
그리고 api 가 "since" param 을 제공하면 그것을 비교해서 새로운 data 만 불러오자.
How to Notify UI
LocalBroadcast 를 사용하는 것이 괜찮다.
Service 를 사용하는 경우 bound interface 를 사용하자.
EventBus ( Otto, GreenRoot's EventBus ) 등을 사용하자.
Cursor 를 보존하고 있는 경우에는 cursor.setNotificationUri( ContentResolver, Uri ); 를 사용하면,
insert, delete, update 등에서 ContentResolver.notifyChange( id, null ); 를 사용하여 notify 할 수 있다.
( CursorLoader 를 사용할 경우 )
언제 Data 를 Fetch 할까?
User Input 이 있을 때.
Prefetch.
GCM Push 가 있을 때.
Big Cookie Approach
Cell 전파는 배터리를 엄청 많이 사용한다.
전파 연결을 하는 데 2초정도가 걸린다.
데이터 전송을 할 때마다 보통 30초정도 계속 전파가 연결되어 있다.
이 전체를 위해 Robospice 를 사용해보자.
ui 와의 interaction 을 제거한다.
high level 이며, strong typed 이다.
caching, json parsing, prioritizing 등의 많은 기능이 있다.
Retry Policy 가 있다.
Active 하게 계속 개발된다.
Volley, DataDroid, Ion, Retrofit 등이 있다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] SlidingPaneLayout Tutorial (0) | 2014.03.19 |
---|---|
[android] 삼성 핸드폰 계열의 버그. ( EditText & SoftInput 관련 ) (0) | 2014.03.18 |
[android] JavaScript Bridge (0) | 2014.03.17 |
[android] DB 를 update 혹은 insert 할 떄 주의해야 할 것 ( thread ) (0) | 2014.03.13 |
[android] manual application sign & zipaligning (0) | 2014.03.12 |
댓글