Объекты потока не собраны мусором после завершения

Я заметил, что у моего приложения есть утечка памяти. Это можно увидеть в DDMS, и я удалось получить ошибку OutOfMemoryError.

Я нашел источник утечки. В одном из заданий поток работает в фоновом режиме. Эта тема остановлена вonDestroy(), Он завершает работу, как это видно из DDMS.

Теперь, если поток запущен, происходит утечка, активность не собирается после уничтожения мусора, потому что на него ссылается поток. Если поток вообще не запускается, все в порядке.

Вот простой пример, демонстрирующий это:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    volatile boolean finished = false;
    byte[] memoryEater = new byte[4 * 1024 * 1024];

    Thread thread = new Thread(new Runnable() {

        @Override
        public void run() {
            while (!finished) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            Log.d(getClass().getName(), "Thread finished");
        }
    });

    @Override
    protected void onDestroy() {
        super.onDestroy();
        finished = true;
    }

    public void startActivity(View view) {
        startActivity(new Intent(this, MainActivity.class));
    }

    public void startThread(View view) {
        thread.start();
    }
}

Добавьте одну кнопку для начала нового действия и одну для запуска потока. Начать новую деятельность. После возврата память будет очищена, только если поток не был запущен.

В чем причина этого поведения?

Ответы на вопрос(4)

Ваш ответ на вопрос