2011-08-25 5 views
2

이러한 종류의 코드가 Android에서 메모리 누수의 원인이됩니까?핸들러를 사용하여 메모리 누수가 발생할 가능성이 있습니까?

class MyActivity extends Activity { 

    Runnable myRunnable =new Runnable() { 
     public void run() { 
      // Do something here 
     } 
    }; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_activity); 
     Handler = new Handler(); 
     Handler.postDelayed(myRunnable, 2000); 
    } 
} 

위 코드에서 myRunnable은 MyActivity에 대한 강력한 참조를 가지며 myRunnable은 스레드 메시지 대기열에 추가됩니다. MyActivity가 닫히면 MyActivity 인스턴스가 여전히 전역 메시지 대기열에서 참조되므로 해당 메모리 누수가있을 수 있습니다.

제대로 이해 했습니까?

답변

1

메모리 누출이 없다고 생각합니다. Runnable이 2 초 후에 호출되며이 메시지는 MessageQueue에서 제거됩니다.

+0

실행 가능한 메시지 큐에 갇혀 가져옵니다 가능성이 있습니까 정적 내부 클래스를 만드는 시도() 메모리 누수를 방지하기 위해 좋은 방법으로) 완전히

당신의 응용 프로그램을 종료하지 않은? – Kai

+0

나는 생각하지 않는다. 'Looper.loop()'및'MessageQueue.next()'구현을 살펴보십시오. – Michael

0

실제로 메시지가 대기열에 걸릴 수 있습니다.

activity.finish()가있는 MyRunnable에서 장기 실행 작업을 수행하는 경우 시스템에서 대기열에서 메시지를 제거 할 시간이 없으며 다음에 활동을 실행할 때 종료됩니다

관련 문제