2014-09-26 2 views
1

Roboguice가 주입하는 컨텍스트를 알고 싶습니다. 응용 프로그램 컨텍스트 또는 현재 활동입니까?roboguice가 주입 한 컨텍스트는 무엇입니까?

저는 Roboguice와 Robospice를 모두 사용하려고합니다. 프래임에 Robospice의 SpiceManager을 주입하고 있는데, 프래그먼트가 SpiceManager에 대해 알지 못한다면 인터페이스를 통해 봅니다. MyInterface을 봅시다.

public class MyFragment extends RoboFragment { 
    //this is where the SpiceManager gets injected 
    @Inject MyInterface manager; 
    ... 
} 

//this is the implementation that I'm going to inject 
//it is simultaneously an event listener for the fragment's life cycle events so that the 
//SpiceManager can be appropriately started and stopped. 
public class MyManager implements MyInterface { 
    private SpiceManager spiceManager = new SpiceManager(MySpiceService.class); 

    //Which context will get injected here? How can I make Roboguice inject a specific context that I want, for example, a specific activity that I want. 
    private @Inject Context context; 

    //Here, I need to start the SpiceManager 
    public void myFragmentOnStart(@Observes OnStartEvent onStart) { 
     //SpiceManager requires a context, more specifically an activity which will be destroyed and then garbage collected, so It shouldn't be an application context because the resources SpiceManager uses will never be released. 
     spiceManager.start(context); 
    } 

    public void myFragmentOnStop(@Observes OnStopEvent onStop){ 
     if (spiceManager.isStarted()) { 
      spiceManager.shouldStop(); 
     } 
    } 
} 

내 질문은 :

이 RoboGuice가 활동 이벤트 옆에 조각 이벤트를 관찰 할 수 있으며, 문서는 명확하지 않다?

SpiceManager가 조각/활동이 파괴 될 때 파괴되는 컨텍스트가 필요하다고 생각합니까? SpiceManager.start(Context context) 코드를 살펴본 결과 ContextWeakReference이 생성되었습니다.

RoboGuice가 특정 Context/Activity을 삽입하도록하려면 어떻게해야합니까?

MyFragment을 사용하면 MyInterface 개체에 Context이 필요하다는 것을 알 수 있습니까? 나는 OnStopEventgetActivity() 방법이 있으므로 onStop에서 Activity을 받고 아무 문제가 없습니다 만, OnStartEvent 그냥 빈 클래스는 것을 발견 그런데

.

답변

1

그래서 많은 질문; RoboGuice가 활동 이벤트 옆에 조각 이벤트를 관찰 할 수있다)

A), 문서는 명확하지 않다?

이벤트는 RG의 모든 것일 수 있습니다. 기본적으로 RG는 활동의 라이프 사이클을 알리는 멋진 이벤트를 제공합니다. RG의 릴리스 3.1은 실제로 Fragments에 몇 가지 새로운 이벤트를 추가합니다. 이것은 2 주안에 ​​발표되어야합니다.

하지만 이벤트 측면에서하는 일은 완전히 합법적입니다. 그냥 분명히. 조각 내에서 활동 라이프 사이클을 듣고 있습니다. 왜 안돼?

필요한 것은 활동의 이벤트 관리자 인스턴스에 등록하는 것입니다. 조각에 @Inject EventManager eventManager을 추가하십시오. RG가 청취자를 자동으로 등록하기에 충분합니다.

B) RS는 요청을 실행하지 않고 콜백에만 사용할 수있는 컨텍스트가 필요합니다. 요청은 서비스에서 실행될 것입니다. RS로 전달하는 컨텍스트는 "이 컨텍스트가 종료되면 모든 리스너가 죽을 것이고이를 알리지는 않지만 여전히 요청을 실행하고 결과를 캐싱합니다."라고 말하는 데 사용됩니다.

여기가 조금 복잡합니다. 가장 쉬운 방법은 활동 레벨에서 향신료 관리자를 관리하는 것입니다. 조각에서 활동으로 이벤트를 보내 필요에 따라 요청을 실행하도록 요청하십시오. 그게 가장 쉬운.

그러나 조각 수준에서 spicemanager를 관리 할 수도 있습니다. 이 경우 해당 단편 자체에서 spyemanager 수명주기를 onStart/onStop 메쏘드로 관리하십시오.

C) MyFragment를 사용하지 않고 MyFragment가 사용하는 MyInterface 객체에 컨텍스트가 필요하다는 것을 알 수 있습니까?

나는 그것을 얻지 못했다.