마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

메모리 Leak으로 인해 값이 누실되서 NullpointException이 납니다.

0 추천

안녕하세요.

 

앱을 만들었는데 이상한 문제가 발생해서요..

 

Fragment를 이용해서 앱을 만들었는데..

 

앱을 실행해서 작동을 하면 정상적으로 작동을 합니다.

 

그런데 앱을 죽이지 않고 반나절 정도 놔뒀다가 다시 앱을 실행하면 NullpointException이 나더라고요..

 

에러를 보니까 DBAdapter나 멤버변수에 넣은 값들이 누실 되서 오류가 나더라고요..

 

메모리 leak이 발생해서 변수값들이 누실 되는건지 Fragment 버그인지 잘 몰라서 글 남깁니다.

 

무슨 문제일까요?

 

제발 좀 알려주세요~

안드정복 (320 포인트) 님이 2013년 9월 23일 질문
릭아아니라, Android Lifecycle 에 맞춰 짜지 않은 것일 가능성이 큽니다. 로직을 점검하세요.

2개의 답변

0 추천
반나절 정도라면 릭일것입니다.

어느부분에서 널포인트가 났는지 보시고, 널포인트가 되는 값을 프리퍼런스에 저장하시면 될듯합니다.
아나콘다v (4,670 포인트) 님이 2013년 9월 23일 답변
그런데요 이게 프리퍼런스에 저장할수 없는것들이라서요..

예를 들면 ListAdapter라던가 DBAdapter에서도 널포인트가 나드라고요.

그밖에 View같은것도 동일해요..

널일때마다 다시 생성을 해줄수도 없고..답답하네요..
화면이 꺼지고 일정시간이 지난 뒤에 앱이나 해당 화면을 초기화를 시키면 어떤가요?
그래서 지금 임시로 onResume에다가 값들이 널이될때 Intro 페이지로 이동하게끔 에다가 걸어 줬습니다. 그런데 문제는 onResume보다 먼저 발생되드라고요.. 다른 페이지에서는 저 오류가 안나는데 handler를 사용한 페이지에서 나드라고요.. 왜 handler가 실행이 되는 걸까요? handler는 페이지 이동시 최초에 한번 실행하게끔 해놨는데..
재실행 시킬때 핸들러가 있는 부분이 호출되는지 확인하시고, onCreate에 있는 왠만한 것들은 다 onResume으로 넘기셔야 할듯하네요.
재실행할때 핸들러는 실행은 안시켜 줍니다. onResume에서 넘겨도 봤는데요 onResume 타기 전에 핸들러를 먼저 타드라고요..핸들러 특성이 머가 있나 찾아봤는데도 모르겠고..Fragment문제인가 해서 찾아봣는데 못찼겠드라고요 ㅜㅜ
핸들러에 send 시키는 부분은 로그를 찍어 보셨나요?
0 추천
방금도 비슷한 답변을 하고왔는데

이건 os 가 activity를 중요하지 않다고 보고 통째로 날려버려서 그렇습니다.

(여러가지이유가있겠지만 오랫동안 백그라운드 상태일때 날릴경우가 많을꺼같네요.)

그래서 oncreate 부터 새로 타게 되므로 static 변수 값같은건 null일 가능성이 큽니다.

그래서 onSaveInstanceState,onRestoreInstanceState

이런 메서드가 액티비티에 있습니다. 저기 번들안에 없어질만한 것들을 넣는 로직을 짜두면

해결 될것 같습니다.
SGLEE (1,690 포인트) 님이 2013년 9월 23일 답변
static 변수가 아닌 Member 변수 인데..

member 변수 값도 날라갈수 있는건가요??

그리고 이게 Bundle로 저장할수 없는 변수들이라서 문제가 됩니다..
처음부터 다시 부른다고 생각하시는게 맞습니다.. 그럼 다 날라간다고바야져

멤버변수든 모든말이죠
...