2013-03-18 6 views
0

비트 맵에서 메모리 집약적 인 문자열을 실행하는 Android 앱을 디버깅하는 데 문제가 있습니다. Google의 Debugging tips에서 알 수 있습니다.안드로이드에서 디버깅 할 때 스레드가 사용하는 메모리를 비울 수 있습니까?

디버거와 가비지 수집기는 현재 느슨하게 통합되어 있습니다. 디버거가 인식하고있는 객체는 디버거가 연결을 끊을 때까지 가비지 수집되지 않습니다. 이로 인해 디버거가 연결된 동안 시간이 지남에 따라 개체가 생성 될 수 있습니다. 예를 들어, 디버거가 실행중인 스레드를 보는 경우 스레드가 종료 된 후에도 관련 Thread 객체가 가비지 수집되지 않습니다. 불행하게도

이 내 응용 프로그램이 릴리스 모드에서 잘 실행되는 동안, 디버그 모드에서 실행되는 메모리 집약적 인 스레드가 가비지 컬렉터에 의해 무시되고 주위의 유지 때문에 더 많은 메모리를 더 사용하는 것을 의미 더 많은 메모리를 소비하는 스레드가 생성되어 필요한 메모리를 할당하지 못하기 때문에 응용 프로그램이 충돌합니다.

가비지 수집기에 이러한 스레드를 수집해야하는지 또는이 문제를 해결하는 다른 방법을 명시 적으로 알리는 방법이 있습니까?

답변

0

결국 Thread 대신 AsyncTask을 생성하여이 문제를 해결했습니다. AsyncTasks가 가비지 수집기에 의해 더 쉽게 정리 된 것 같아 문제없이 디버그 모드로 앱을 실행할 수있었습니다.

AsyncTask는 백그라운드 작업을 생성하는 데 권장되는 방법입니다. 백그라운드에서 수행 할 작업은 작업의 doInBackground(Params...) 메소드에 배치해야합니다. AsyncTasks는 대개 완료 후에 UI 스레드에서 작업을 수행하기위한 것이지만 onPostExecute(Result) 메서드를 비워 두거나 단순히 표시하지 않고 UI 스레드를 방해하지 않도록 할 수 있습니다.

관련 문제