예전에 탭안에서의 액티비티 이동문제 때문에 고생을 하다가

안드로이드펍에서 '봉이선달'님이 올려주신 글을 보고 해결을 했었습니다.

 

많은 분들이 쓰셔서 아는분도 계실듯한데..

 

지금껏 문제없이 쓰는줄 알았는데 최근에서야 일부 기종에서 문제가 있음을 알았습니다.

어떻게 실험정신으로 해보다가 해결되긴 했는데 왜 문제가 발생하는지 이해가 안됩니다 ;;

 

문제가 되는 부분은

 

NavigationActivity 클래스에서

 

public void goNextHistory(String id, Intent intent) { 
        NavigationGroupActivity parent = ((NavigationGroupActivity) getParent());
        View view = parent.group.getLocalActivityManager().startActivity(id,intent).getDecorView();
        parent.group.replaceView(view, id);
}

 

빨간 부분인데요.. startActivity 의 결과인 Window 객체가 null이여서 nullPointerException이 뜨는 문제였죠..

 

이런 현상은 탭안의 액티비티1 -> 액티비티2 로 이동 후 뒤로가기를 통해 액티비티1로 돌아온후 다시 액티비티2로 이동시

발생했습니다.

 

결론적으로 에러 발생하는 부분은 startActivity(String id, Intent intent) 메서드에서 id값이 문제였는데요..

액티비티 이동시 어차피 액티비티1 에서 액티비티2 로 이동하는거기 때문에 동일한 id값일수 밖에 없었는데..

 

id값이 동일할 경우 몇몇 폰은 startActivity 결과로 null값을 리턴했고.. 몇몇 폰은 정상적으로 작동했다는 거죠..

 

일단 startActivity를 호출할때마다 ID에 임의의 정수를 더해주는 방식으로 아이디 중복을 피하니 문제가 없어지긴 했는데..

 

이거 왜 이런걸까요 ;;  검색을 해봐도 저와 같은 문제를 겪은 분이 없으시네요..

 

하지만.. 갤럭시s3, 디자이어HD, 베가레이서 정상 작동했고....

가상머신, 갤럭시 네오, 옵티머스 LTE에서는 오류가 발생했습니다..