한 액티비티가 있는데요..... A액티비티라고 할꼐요 ㅠ.,ㅜ
A액티비티에를 처음 실행 시키거나 잠깐 백그라운드에 갔다가 올라오거나 (예로는 전화를 받는다던지.... 액티비티가 활성화 되있을때 백키를눌러 FINISH시키는게 아닌 홈키로 뒤로 보내는걸 말합니다. 앱을 켜두고 바로 잠금화면을 띄우는것도.... ) 한 몇십분까지는 괜찮습니다...
근데 몇시간정도 앱을 백그라운드에 있다가 다시 앱 아이콘을 눌러 액티비티를 활성화 시키거나.... 잠금화면에서 해제하여 앱 화면으로 돌아갈 시 앱이 중지되어 죽습니다...... 에러 로그는... 첨부파일 해 두었구요 ㅠ.,ㅜ
해당 죽는 곳의 소스는..
oncreate에
mPcNameTv.setText(mContents.getProductList()
.get(mContents.getSelectNum()).getComputerName()
+ "");
이부분 입니다.
mcontens라는 전역변수 클래스에서 전역변수들을 가져와 textview에 settext하는 것입니다.
해당 부분이 이상하면 액티비티가 아예 처음 실행 될 때 죽을텐데... 잘동작되다가 꼭 장시간 뒤로 보낼 시 다시켜면 문제가 발생해.. 머리가 아픕니다 ㅠ.,ㅜ
제가 그냥 추측해 보았는데...... 액티비티를 장시간 백그라운드에 보내면 안드로이드가 삭제하나요 ?? 그래서 전역변수의 값도 없어지는건가요 ? 만약 그렇다면 어떻게 해결해야될까요? 전역변수의 사이즈가 0이되면 그냥 앱을 재시작 해볼까요 ㅠ.,ㅜ
예상하시는 바가 맞습니다. 장시간 백그라운드에서 있으면 activity를 kill시키고 다시 포그라운드로 올라오는 시점에서 생성 해줍니다.
따라서 장시간 백그라운드에서 살아남으려면 service를 만들고 해당 service를 foreground로 올리면서 notification 에 등록을 해주면 살아 남을 수 있습니다. 하도 예전의 일이라 기억이 정확히 나지 않는데 bundle에 썼을때 해당 값이 복구 됬는지는 기억이 나지 않네요.
정리하자면 액티비티가 백그라운드에서 죽었다가 다시 foreground로 올라올떄 이전 데이터 복원하기 위해서는 데이터를 안전한 곳에 보관 해야 한다 입니다. 그중에 하나가 foreground 급에 service에 두는 것입니다. 다른 예로는 프로퍼티에 넣어 놓던가, bundle(이건 기억이 가물거려서 확실한지 모르겠네요)등 다른 방법을 찾으셔야 합니다.
mContents가 ArrayList인데 현재 카운트가 0이네요. 해당 소스 전에 if문을 이용해 간단히 mContents의 카운트를 체크해 보세요.
또한 onCreate가 호출되었다는건 앱이 종료되었다는것을 뜻합니다. onCreate는 최초 1회 호출되도록 되어있습니다.
백그라운디에서 복귀할땐 onResume을 호출하게 됩니다.