앱을 실행하면 첫 번째 활동에서 힙 크기가 10MB로 증가하고 다음 활동으로 넘어 가면 힙 크기가 37MB로 증가합니다. 이 두 번째 활동에서 버튼을 클릭 할 때 bitmap.recycle()
으로 메모리를 릴리즈 할 예정이므로 특정 버튼을 클릭하면 힙 크기가 32MB로 줄어 듭니다. 이제이 두 번째 활동을 끝내라고하면 내 메모리 크기가 16MB로 줄어들어 첫 번째 활동의 원래 메모리 크기가 10MB 였기 때문에 스택에서 완전히 제거되지 않는다는 힌트를 제공합니다.완료되면 스택에서 작업을 완전히 제거하는 방법?
이제 두 번째 활동으로 돌아 가면 다음과 같은 크래시가 표시되어 버튼 클릭으로 릴리스 한 비트 맵이 다시 만들어지지 않습니다. 사용자가 해당 활동을 입력 할 때마다 두 번째 활동에서 동일한 onCreate 메소드를 사용하므로 xml에서 비트 맵을 다시 가져와야합니다.
06-26 08:45:39.636: E/AndroidRuntime(6265): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected]
내가 여기에 누락 되었습니까? 일단 완료되면 스택에서 활동을 완전히 제거하는 방법은 무엇입니까?
나는 활동 1에서 android:launchMode="singleTop"
과 android:clearTaskOnLaunch="true"
을, 활동 2에서 android:launchMode="singleTop" android:noHistory="true"
을 사용해 보았습니다.
모든 의견을 환영합니다.
활동에 대해 더 많은 코드가 필요하다고 생각하십시오. .recycle()을 사용하지 않을 것입니다. 어딘가에서 컨텍스트 (활동)에 대한 참조를 잃지 않도록하십시오. – Blundell
두 번째 활동을 재사용 할 계획이라면 왜 재활용하고 있습니까? –
두 번째 액티비티를 스택에서 완전히 제거한 후에 다시 finish()를 호출하고 다시 호출 할 때 다시 작성하기를 원합니다. 이것은 앱에 매우 중요합니다. –