fragment사용시 Toast등을 사용하기 위해 getActivity()를
사용해야 합니다.
앱을 디버깅하고 실행하면 처음에는 잘 됩니다.
그런데 애플리케이션이 죽었다 다시 살아나는 경우 (정확히 캐쉬만 날라간 경우)
getActivity()가 특정 조건에서 null로 떨어지게 됩니다.
public class Test extends Fragment {
@Override
public View onCreateView(...생략) {
View rootView = inflater.inflate(생략);
loadWeb();
return rootView
}
public loadWeb() {
getActivity() // 이 부분은 null이 아님
connector = new Connector();
connector.setNetworkListener(new NetworkListener() {
@Override
public void onSuccess() {
getActivity() // 이 부분은 null
}
}
getActivity() // 이 부분은 null이 아님
}
}
특이한 경우가 스레드를 사용하는 인터페이스 안에 getActivity()는 null로 떨어지게 되지만
함수안에 있는 경우는 잘 받아온 다는 점입니다.
이 것도 신기하지만 더 신기한것도 있습니다.
onSuccess() 인터페이스 함수를 다음과 같이 한 번 null인지 검증을 하면 null이 아니게 됩니다.
@Override
public void onSuccess() {
getActivity() => 널
if (getActivity != null) {
getActivity() => 널 아님
}
}
현재 해결책은 onStart() 안에서 앱 동작에 관한 것을 구현하고 있습니다.
이 때는 getActivity()가 널로 내려오지 않더군요.
스레드 생명 주기는 보니, 앱 캐쉬가 날라가면
onAttach 를 불렀다가 다시 detach를 부르고 다시 onAttach를 부른다는 점입니다.
혹시 이런 경험 하신 분들...조언좀 부탁드려요