2012-09-29 5 views
2

android annotations를 사용하여 android 용으로 개발 중입니다. 나는 관찰자로서 활동을 추가하고자하는 싱글 톤 관찰 가능 객체를 가지고있다. 다음과 같은 것 :destroy() android에서 관찰자 제거

@EActivity(R.layout.myActivity) 
public class MyActivity extends SherlockActivity implements Observer { 

    @Bean //has singleton scope 
    protected Observerable o; 

    @Override 
    public void onCreate() { 
     o.registerObserver(this); 
    } 

    @Override 
    public void onDestroy() { 
     o.unregisterObserver(this); 
    } 

    //more code 

제 질문은 on destroy 메소드와 관련이 있습니다. 중지되거나 일시 중지 된 상태에서 안드로이드가 활동을 종료시키는 상황이 있습니까onDestroy()이 없으면 이 표시됩니까? 이 경우 내 Observerable은 더 이상 시스템에서 사용하지 않는 활동에 대한 실제 참조를 유지할 수 있습니다. 이는 좋지 않습니다. 아니면 그렇지 않은가요? 내 추정치 인 경우 등록 된 옵서버 목록에있는 모든 활동에 대한 약한 참조를 유지하는 것이므로 자동으로 등록 취소 될 수 있습니다. 이것은 좋은 해결책입니까 아니면 필요하지 않은가요?

+0

Observer를 사용하고있는 목적이 무엇입니까? – Dharmendra

+0

ormlite를 통해 도메인 객체를 수정하려고합니다. 이러한 객체를 렌더링하는 모든 활동은 관찰자 통보를 통해 Create/Read/Update 수정에 응답합니다. 그래서 예를 들어, 옵서버 구현을 통해 모든 도메인 목록을 보는 활동에 새로운 도메인에 대한 통보가 나 관찰 도메인을 통해 OrmLite 저장소를 통해 데이터베이스에 새로운 도메인 객체를 추가 할 수 있습니다. – mogronalol

답변

2

OS는 onDestroy를 호출하지 않고 프로세스를 종료 할 수 있지만 그렇지 않은 경우 호출되는 onDestroy에 의존 할 수 있습니다. Observable이 활동과 동일한 과정에 있다면, 괜찮습니다.

+0

그래서 그것은 onDestroy()를 호출하지 않고 전체 애플 리케이션/프로세스를 종료하지만 개별 활동을 종료 할 때 항상 onDestroy (? – mogronalol

+1

"종료 된"활동에 대해 이야기하는 것은 의미가 없습니다 .OS가 활동에 의해 보유 된 일부 자원을 다시 사용하고자 할 때, onDestroy를 호출하여 해당 활동이 더 이상 유효합니다. 활동 자체는 클래스의 인스턴스이므로 가비지 수집 될 때까지 남아 있지만 대부분의 메서드는 호출 될 때 예외를 throw합니다. 이는 실제로 OS에 의해 종료 될 수있는 프로세스와는 대조적입니다. –

1

Android documentation의 활동주기에 따르면 다른 응용 프로그램을 시작해야하고 시스템에 충분한 메모리가없는 경우이 경우가 발생할 수 있습니다.

편집 : 글쎄,이 시스템에서는 여전히이 방법을 호출 할 것 같습니다. 더 이상 워크 플로우에 대해 잘 모르겠습니다 ...

+0

그래, 난 그게 전화 여부, 약한 참조 내 문제를 해결할 수있는 것 같아 혼란에있어 – mogronalol