2015-01-05 5 views
5

모든 조각에 대해 내 안드로이드 응용 프로그램에서 영역 객체를 만들고 관리하지 않으려 고했습니다. ThreadLocalVariable이 좋은 시작일지도 모른다.영역을 올바르게 사용하는 방법

public class RealmInstanceGenerator extends ThreadLocal<Realm> { 

    public Realm getRealmForMyThread(Context context) { 

     if(get() == null && context != null) 
      super.set(Realm.getInstance(context)); 

     return get(); 
    } 

    public void setRealmForCurrentThread(Context context) { 

     if(context != null) 
      super.set(Realm.getInstance(context)); 
    } 

    @Override 
    protected Realm initialValue() { 
     return null; 
    } 

    @Override 
    public void remove() { 
     if(get() != null) get().close(); 
     super.remove(); 
    } 
} 

난 그냥 내 유틸 싱글 톤 클래스에 RealmInstanceGenerator의 정적 최종 개체를 만들고 내 MainActivity에 setRealmForCurrentThread을 부를 것이다. 그런 다음 내 활동이 끝나면 제거를 요청할 것입니다. 새 스레드의 경우 새 영역 객체가 자동으로 생성됩니다. 좋은 전략입니까?

+0

내가 [영역 1.2.0이 설명서]를 썼다 (HTTPS ://medium.com/@Zhuinden/basics-of-realm-a-guide-to-using-realm-1-2-0-634471c0fe8f#.sltph3ynl) – EpicPandaForce

답변

20

기독교인이 여기 있습니다. 좋은 전략입니다. 운 좋게도 이미 구현했습니다. 모든 Realm 인스턴스는 이미 ThreadLocal에 캐시되어 있으며 카운터를 사용하여 인스턴스를 추적합니다. 영역이 0에 도달하면 영역이 완전히 닫힙니다.

이는 항상 close()를 호출하는 한 실제로는 remove() 메소드와 동일하다는 것을 의미합니다.

할 수 있습니다 여기이 예에서 사용 된 패턴을 참조하십시오 여기에 https://github.com/realm/realm-java/tree/master/examples/threadExample/src/main/java/io/realm/examples/threads

그리고 영역 클래스의 소스 코드를 : https://github.com/realm/realm-java/blob/master/realm/src/main/java/io/realm/Realm.java

+0

영역 백엔드는 LMDB를 기반으로합니까? forntends와 같은 오픈 소스인가요? – Maniero

관련 문제