2012-11-13 14 views
1

내 앱을 종료 할 때 (뒤로 버튼 또는 홈 버튼을 눌러) ActivityonDestroy() 메서드가 호출됩니다 (여기서 내가 비트 맵으로 정리합니다). 활동이 파괴 된 후 다시 시작될 때 onCreate가 호출되지 않습니다.

내가 응용 프로그램을 다시

onCreate()는 ...라고되지 않습니다 그것은 Activity이 완료되었다는 사실에도 불구하고, 바로 onStart()로 이동합니다. 이로 인해 "재생 된 비트 맵 사용 중"오류가 발생합니다.

Activity이 파괴 된 후에 항상 호출되도록하는 방법이 있습니까?

편집 : 나는 잘못 생각했다. onCreate()가 호출됩니다. 그러나 여전히 "재활용 된 비트 맵을 사용하려고합니다"오류가 발생합니다. onCreate()가 모든 단계를 거치면 재활용 된 비트 맵을 다시로드하지 않겠습니까?

+0

Android 버전? 장치? 호출되지 않았 음을 어떻게 확인합니까? – WarrenFaith

+0

홈 단추를 누르면 활동이 소멸되지 않고 백그라운드에서 작동하고 onPause() 메서드가 호출되며 다시 시작할 때 onResume 메서드가 실행되고 onDestroy() 메서드가 실행됩니다. 다시 버튼을 누르면 실행되고, 다시 실행하려고하면 onCreate()가 실행됩니다. – Houcine

+0

홈 버튼을 누르면 활동은 대개 onDestroy()가 아니라 onStop()으로 이동합니다. 당신이 무엇이든 놓치지 않도록 로그 메시지'onCreate()','onStop()'및'onDestroy()'를 작성하십시오 ... – Luis

답변

0

참조하십시오. 비트 맵을 재활용하는 경우

image.setImageDrawable(getResources().getDrawable(R.drawable.myImage)); //WRONG!!!! 

분명히, 위의 코드는 비트 맵 메모리를 재 할당하지 않습니다, 그리고 그 이미지 뷰를 그릴하려고 할 때 프로그램이 충돌합니다 :/입술에서 이미지를로드 할 수 내 원래의 방법이었다.

재활용 된 비트 맵 (또는 적어도, 내 문제를 해결하는 방법을)로드하는 올바른 방법은 다음과 같습니다

image.setImageDrawable(new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.myImage))); //correct! 

그것은 여전히에 관해서는 내 질문에 대답하지 않는 이유, 종료 후 app 및 onDestroy가 호출되어 앱을 다시 입력하면 재활용 된 비트 맵을 찾습니다. 이론적으로 앱은 처음부터 시작해야합니다.

3

귀하의 앱은 onDestroy가 강제로 호출되도록 보장해야합니다. 왜냐하면 여러분은 액티비티 라이프 사이클을 살펴보면 onCreate를 포함하지 않는 onDestroy에서 onStart로 돌아갈 경로가 없기 때문입니다. 실제로, 액티비티는 재개 된 상태로 되돌릴 콜백과 역 콜백으로 초기화를 풀어냅니다. 공식 문서 here 살펴보기 어쩌면 꽤 많은 액티비티를 강제하기 위해 어딘가에 finish() 메서드를 호출하고 있을까요?

+0

정확합니다. onCreate 로그가 간과되었습니다. 따라서 onCreate가 호출되고 있지만 여전히 재활용 된 비트 맵 오류를 사용하려고합니다. – romamnmlst

+1

재활용 된 비트 맵 오류는 createBitmap을 호출하는 방법과 관련이 있으며 활동주기와 관련이 없습니다. 응용 프로그램에서 발생한 오류에 대한 코드 스 니펫을 제공해야 왜 오류가 발생하는지 알 수 있습니다. 나는 당신이 비트 맵을 호출하고 있다고 가정하고있다. 비트 맵에서 화면에 렌더링하고자하는 비트를 재사용하고 recycle 명령은 렌더링 명령 전에 실행 중이지만, 코드를 제공하지 않으면 그게 전부다. –

+0

또는 정적 참조 (또는 다른 누설) 그것을로드하는 활동 외부의 비트 맵에? – Simon

0

당신이 홈 버튼을 누르면, 활동이 파괴되지 않으며, 그것은 단지 배경에 보내지고,이 방법 onPause()가 호출됩니다, 당신은 다시 시작할 때, 방법 onResume()onDestroy()가 실행되는 방법을 실행됩니다 뒤로 단추를 누르거나 finish() 메서드를 호출하여 작업을 강제로 삭제 한 다음 작업을 다시 시작하려고 시도하면 onCreate()이 실행됩니다.

이 문제는 내가 이미지 뷰 이미지를 설정 상황이었다 this

관련 문제