2012-05-20 2 views
0
public class MyTabActivity extends TabActivity { 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    dataManager = DataManager.getInstance(getApplicationContext()); 
    } 
} 

위와 같이 탭 활동이 있습니다. 그것은 처음 실행에 잘 작동합니다. 활동이 메모리에서 삭제 된 백그라운드에서 잠시 후 앱을 다시 열면 충돌이 발생합니다. 이유는 getApplicationContext()가 null을 반환하기 때문입니다.TabActivity에서 null을 반환하는 getApplicationContext

이 설정은 다른 활동에서 아무 문제없이 사용됩니다. 언제 어디서/왜/그것이 null을 반환 할 것인가라는 문서를 찾을 수는 없습니다.

+0

가 왜'this' 대신 사용 해달라고 상황에서 상속 때문에? – Ronnie

+0

@ userSeven7s 왜냐하면 내가 작업 컨텍스트가 아닌 응용 프로그램 컨텍스트가 필요하기 때문입니다. – mouser58907

+0

'this.getApplicationContext()'시도 ... – Ronnie

답변

0

당신은 간단하게 통과 할 수있다 "는이"당신의 DataManager.getInstance에 MyTabActivity은 (세 가지 수준까지)

+0

그래도 응용 프로그램의 컨텍스트를 유지해야합니다. 여기서 차이점을 읽을 수 있습니다 : http://stackoverflow.com/questions/4128589/difference-between-activity-context-and-application-context – mouser58907

+0

@ mouser58907 : '유지'할 필요가 없습니다. 곧'TabActivity'가 파괴되면서, 당신의'dataManager' 변수는 더 이상 유효하지 않을 것입니다. 'TabActivity'와'dataManager' 객체의 수명 동안 유효한 'Context' 만 있으면됩니다. 이 경우'dataManager' 객체는'onCreate (...) '메소드에서만 생성되고'TabActivity'가 소멸 될 때 더 이상 관련이 없기 때문에'this'를 사용하십시오. – Squonk

+0

@ mouser58907, MisterSquonk 님이 나를 위해 방금 답변하셨습니다. –