내 응용 프로그램에서 메모리 사용을 최소화하기 위해 노력하고있어 내가하고있는 일 중 하나는 onPause 메서드에서 finish()를 호출하는 것입니다. 대부분의 경우 잘 작동하는 것으로 보이지만 사용자가 다음 활동에서 뒤로 버튼을 클릭하면 논리적으로 완료된 활동을 건너 뛰고 더 뒤로 이동합니다. 백 스택에서 해당 액티비티를 가질 수 있으며 사용자가 다시 누르면 다시 생성됩니까?onPause 활동을 완료했지만 여전히 백 스택에 있습니까?
답변
아니요.이 결론은 the task and backstack documentation과 activity documentation뿐 아니라 stack data structure의 작동 방식에 대한 일반적인 이해에서 비롯됩니다.
스택 데이터 구조는 푸시/풋 (push/put)과 콜렉션에 무언가를 추가하는 두 가지 조작 만 가능합니다. Stacks folow는 LIFO에서 마지막으로 추가 된 것 (당신의 경우 활동)이 팝이 호출 될 때 제거되는 첫 번째 모델입니다.
안드로이드 라이프 사이클 활동은 일반적으로 뒤로 버튼을 누르면 스택에서 팝됩니다. 그 시점에서 onDestroy()
이 호출되고 활동이 제거됩니다 (확인하려면 onDestroy()
메서드를 무시하고 결과를 로깅하여이를 확인할 수 있습니다). 또는 finish()
을 그대로 호출하여 onDestroy()
을 호출하도록 할 수 있습니다. 활동을 끝내는 것은 효과적으로 뒤로 누름과 똑같은 일을합니다. 액티비티는 파괴되어 스택에 추가되기 전에 재 작성해야합니다.
스택을 수행하려는 경우 활동이 존재하지 않지만 참조와 비슷한 무언가가 유지되는 중간 상태를 통합해야합니다. 상단으로 이동하면 해당하는 활동을 재현해야합니다. 이것은 자루가 작동하는 방식이 아니기 때문에 (즉, 활동 만 수행 할 수 있음) 상태가 존재할 수 없으므로 사용자가 말하는 결과는 불가능합니다.
아니요, 가능하지 않다고 생각합니다. 일단 활동을 끝내면 사라집니다. 그러나 스택을 구현하고 처리 할 수는 있습니다. 다시 누르면 닫힌 활동을 다시 시작합니다.
당신의 목표는 (필요한 경우) 그냥 에서 onCreate() 방법을 비워 둘 - 그냥 활동 수명주기의 사용은 당신이 다른 작업을 수행 할 수 있습니다
을, 메모리를 사용을 최소화 이다. (setContentView (layout) 만 수행)
-Override onResume();
- onCreate에서 수행 한 작업은 onResume()에 붙여 넣기 만 복사하면됩니다.
- 그리고 에서
onPause(), 재활용 당신의 모든 비트 맵 및 null로 설정은 (난 당신이 그것에 대해 매우 신중 왜 그게 비트 맵을 사용하는 생각). 은 내 전망을 삭제합니다.이제 새로운 활동을 시작할 때 onPause()이 호출됩니다. 그러면 모든 비트 맵 및보기가 제거됩니다. 그리고 돌아올 때 onResume()이 호출됩니다 (onCreate는 호출되지 않습니다). 그러면 뷰와 비트 맵이 다시 초기화됩니다.
모든 ImageViews를 null로해야합니까? 또는 ImageViews가 비트 맵을 자동으로 재활용합니까? – StackOverflowed
이미지보기는 비트 맵을 재활용하지 않습니다. bitmap.recycle()으로 비트 맵을 재활용해야합니다. –
- 1. FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP을 사용하여 활동을 시작할 때 백 스택에 활동이 여전히 남아 있습니다.
- 2. onPause 메서드는 실제로 활동을 죽입니까?
- 3. 조각이 백 스택에 추가되지 않았습니다.
- 4. 백 스택에 조각이있는 onSaveInstanceState 사용?
- 5. onPause 메서드에서 활동을 시작하는 방법은 무엇입니까?
- 6. 백 스택에 원하는 결과가 표시되지 않습니다.
- 7. 새로운 활동을 시작하면 onPause 메소드가 실행됩니다.
- 8. 현재 활동 스택에 새 활동을 추가하지 않음
- 9. Android 메모리 문제 : 백 스택에 너무 많습니까?
- 10. Android Studio의 메모리 모니터는 finish() 후에도 여전히 메모리에 활동을 보여줍니다
- 11. 활동을 강제로 강제로 종료하고 스택에 남아있게하려면 어떻게합니까?
- 12. addToBackStack은 프래그먼트 관리자의 백 스택에 추가하지 않습니다.
- 13. 배경/백 스택에 하위보기를 추가 하시겠습니까?
- 14. 조각 트랜잭션이 백 스택에 추가되지 않음
- 15. 안드로이드에서 백 스택에 단편을 추가하는 방법
- 16. onPause 후 단편 추가
- 17. onPause() 또는 onStop()
- 18. 스레드 중지 onPause
- 19. 백 스택에서 주요 활동을 제거하는 방법은 무엇입니까?
- 20. onPause()에서 finish()를 사용하여 Android 활동을 삭제합니다.
- 21. 안드로이드의 백 스택에서 활동을 제거하는 방법?
- 22. 활동 백 스택에서 활동을 제거하는 방법은 무엇입니까?
- 23. 애플리케이션 수준 onPause
- 24. 활동 스택에 활동 설정
- 25. 이 이미 활동을 추가했지만 여전히 오류
- 26. 동일한 조각의 인스턴스 2 개를 백 스택에 추가하는 방법
- 27. Android onPause() 및 기기 기울이기
- 28. Android 백 스택의 내용을 볼 수 있습니까?
- 29. 왜 백 스택에 조각을 추가 할 수 없습니까?
- 30. 조각을 맨 뒤쪽/뒤쪽 조각 뒤에있는 백 스택에 추가하십시오.
왜 정말로 필요합니까? 'OutOfMemoryError'에 문제가 있습니까? '활동'만으로도 기껏해야 수 킬로바이트의 메모리를 차지합니다. –